在fortran 95中,如果您在声明中分配变量
integer :: var = 0
Run Code Online (Sandbox Code Playgroud)
它相当于
integer, save :: var = 0
Run Code Online (Sandbox Code Playgroud)
因此,变量在例行执行后保留(相当于static
C语言),并且在再次调用时不会重新初始化.这种(恕我直言,危险)行为背后的理由/技术问题是什么?
Wil*_*cat 10
我不认为这种行为背后有一些理由.
但据我所知,斯特凡诺,你使用了错误的术语.在您的代码中,没有使用初始化表达式(0)的赋值语句仅变量(var)初始化.
integer :: var = 0 ! type declaration & initialization
integer :: var ! type declaration
var = 0 ! assignment
Run Code Online (Sandbox Code Playgroud)
所以它似乎只是委员会的设计决定.如果我们有这样的表达式(在类型声明语句中使用相等符号),则初始化不是赋值.初始化只在程序(而不是程序)执行期间发生一次.
但是,这种决定可能有一些历史原因.看看这个帖子.
今天,这种行为是危险的,因为许多其他广泛使用的语言遵循关于初始化/赋值的另
许多旧的FORTRAN 77和早期的编译器静态地分配了所有变量.许多程序员依赖于这种行为 - 这在技术上是他们程序中的一个错误,因为除非他们在声明中使用"SAVE"限定符(或者在每个过程中添加了一个简单的SAVE语句),否则在重新进入a时变量的值是未定义的.程序.但是由于在那些日子里,程序往往与特定的平台和编译器联系多年,程序员们却侥幸成功.这是将遗留的FORTRAN 77代码移植到现代Fortran> = 90编译器中非常常见的"问题".大多数编译器都提供编译时开关来恢复此行为,例如gfortran的fno-automatic选项.很可能委员会认为在他们的声明中初始化的变量很可能需要SAVE属性 - 在我看来,这是一个合理的设计决策.我认为与其他语言最不同的是,最容易混淆多语言程序员的是初始化只进行一次.
归档时间: |
|
查看次数: |
4691 次 |
最近记录: |