fortran - 声明和SAVE属性陷阱的Fortran分配

标签 fortran

在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/

相关文章:

c++ - 编译混合的 GNU Fortran/C++ MPI 共享库

linux - 是否可以在 Linux 中编译独立的 Fortran 可执行文件?

离散值的 Fortran 循环

fortran - 将 Fortran 2D 数组打印为矩阵

testing - 使用 gcov [Linux/Fortran] 进行共享库覆盖率测试

performance - Fortran 性能,在每个子程序调用时分配或声明一个全局变量并分配一次

fortran - 为 ARPACK 中的数组 ipntr 赋值

module - 是否可以确定哪个 Fortran 编译器生成了 ".mod"文件?

fortran - 互操作性 : Fortran to C++

arrays - MPI 可以收集、减少、发送或接收 Fortran 派生类型吗?