在fortran 95中,如果在声明时分配变量
integer :: var = 0
它等效于
integer, save :: var = 0
因此,该变量将在例行执行后保留(相当于C语言中的
static
),并且在再次调用时不会重新初始化。这种(恕我直言)危险行为背后的原理/技术问题是什么?
最佳答案
我认为这种行为没有任何根据。
但据我所知Stefano,您使用了错误的术语。在您的代码中,没有赋值语句仅使用初始化表达式(0)进行变量(var)初始化。
integer :: var = 0 ! type declaration & initialization
integer :: var ! type declaration
var = 0 ! assignment
因此,这似乎只是委员会的设计决定。如果我们有这样的表达式(在类型声明语句中带有等号),那就是初始化而不是赋值。并且初始化仅在程序(而非过程)执行期间发生一次。
但是,做出此决定可能有一些历史原因。看一看this线程。
今天,这种行为很危险,因为许多其他广泛使用的语言遵循有关初始化/赋值的另一种约定。
关于fortran - 声明和SAVE属性陷阱的Fortran分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3352741/