fortran保存整数

mgi*_*son 2 fortran save local-variables

我今天遇到的代码看起来有点像这样:

      subroutine foo()
      real blah
      integer bar,k,i,j,ll
      integer :: n_called=1
      save integer

      ...
      end
Run Code Online (Sandbox Code Playgroud)

看起来这里的意图可能是save n_called,但是即使是一个有效的语句来保存所有整数 - 或者它是否隐含地声明了一个名为integer并保存它的变量?

Hri*_*iev 5

第二种解释是正确的.Fortran有许多关键字,INTEGER是其中之一,但它没有保留字,这意味着关键字可以用作标识符,虽然这通常是一个糟糕的想法(但它仍然继续C#,其中一个可以前缀一个关键字@和用它作为标识符吧?)

SAVE声明,即使它的目的n_called是肤浅的.Fortran会自动保存所有具有初始化程序的变量,这就是代码可能按预期工作的原因.

 integer :: n_called=1
Run Code Online (Sandbox Code Playgroud)

n_called是自动的SAVE.对于被迫维护/扩展/创建新Fortran代码的C/C++程序员来说,这通常是一个非常糟糕的惊喜:)