隐式转换整数< - >在Fortran if语句中是合乎逻辑的

时间:2016-05-18 08:02:22

标签: fortran gfortran

我有一些遗留的Fortran代码,我被要求分析并翻译成现代语言。我不知道过去使用了哪个编译器来编译代码,所以现在,我正在尝试用gfortran编译它。代码包含这样的声明导致gfortran抱怨:

  program test
  implicit none
  integer*4 :: var
  var=.true.

  if(var) then
        write(*,*) "Hi"
  endif

  end program test

使用gfortran进行编译会出现以下错误:

test.f:6:9:

       if(var) then
         1
Error: IF clause at (1) requires a scalar LOGICAL expression

(此外,它会在var=.true.)中发出有关转换的警告。

我不确定代码编译的是哪个编译器,但显然代码应该按原样编译。有没有办法告诉gfortran接受这种转换?

根据文档,在if语句中没有进行隐式转换:https://gcc.gnu.org/onlinedocs/gfortran/Implicitly-convert-LOGICAL-and-INTEGER-values.html

1 个答案:

答案 0 :(得分:0)

这在GFortran中是不可能的。 manual州:

  

但是,没有隐式转换INTEGER值   if-statements,I / O操作中的LOGICAL或INTEGER值。

您只能在

等作业中执行隐式转换
  integer :: var
  var = .true.

但即便如此,你必须非常小心。它不符合标准,编译器之间的值var会有所不同。英特尔过去常常使用-1(所有位设置为1),除非为-standard-semantics选择.true.,但gfortran使用{C语言中的+1。新版本的英特尔Fortran更改了默认设置。另一个方向甚至更棘手,可能有值.true..false.