7

如果我在 Fortran 声明语句中初始化一个变量,该变量会隐式接收一个 SAVE 属性,并且初始化表达式只会执行一次。

例如下面的程序

program test
implicit none

    call foo()
    call foo()

contains

    subroutine foo ()
        integer :: i = 0

        i = i + 1
        write(*,*) i
    end subroutine foo
 end program test

将打印

1
2

由于这在许多其他语言中都不同,我想知道为什么 Fortran 标准委员会选择了这种行为?

非常感谢!麦克风

4

1 回答 1

10

这主要是由于历史原因。旧的编译器(Fortran IV(66) 和之前的编译器)主要使用静态内存来生成程序。旧机器甚至没有任何堆栈。因此程序的行为,因为变量被定义为save

变量初始化的前身,DATA语句,更像是定义静态内存的初始内容(类似于汇编中数据段的指令),而不是您可能从 C 中知道的 on call 变量初始化。语法变得类似于稍后的 C 变体。

于 2013-01-28T15:50:08.677 回答