gpt4 book ai didi

fortran - 为什么 Fortran 中有一个隐含的 SAVE 属性?

转载 作者:行者123 更新时间:2023-12-04 14:02:56 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Fortran assignment on declaration and SAVE attribute gotcha

(2 个回答)


3年前关闭。




如果我在 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 标准委员会选择了这种行为?

非常感谢!
麦克风

最佳答案

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

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

关于fortran - 为什么 Fortran 中有一个隐含的 SAVE 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14565739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com