![]() |
1
13
要回答您的问题: 是的,Fortran通过函数和子例程调用保留内部变量的值 . 在某些情况下… 如果用save属性声明一个内部变量,它的值将从一个调用保存到下一个调用。当然,这在某些情况下是有用的。 但是,在第一次了解Fortran的Gotchas时,您的问题是一个常见的反应:如果您在其声明中初始化了一个内部变量,那么它会自动获得save属性。您已经在子例程中完成了这一点。这是符合标准的。如果不希望发生这种情况,请不要在声明中初始化。 这就是(一些)新来者对该语言感到惊讶和抱怨的原因。但是,不管他们多么抱怨,它不会改变,所以你只需要(a)了解它,(b)了解它的计划。 |
![]() |
2
4
这和
编程语言设计在其幼年时期,早在
原来,
到目前为止,有很多遗产
|
![]() |
3
3
这已经在这里讨论了好几次,最近在 Fortran assignment on declaration and SAVE attribute gotcha 你不必通过实验来发现这种行为,这在更好的教科书中有明确的说明。 不同的语言是不同的,有不同的行为。 这种行为有其历史原因。许多fortran 77及更早版本的编译器在过程调用中保留了所有局部变量的值。程序员不应该依赖于这种行为,但很多人确实这样做了。根据标准,如果希望局部变量(非公共变量)保留其值,则需要使用“save”。但许多程序员忽略了这一点。在那个时代,程序被较少地移植到不同的平台和编译器,因此错误的假设可能永远不会被注意到。在遗留程序中发现这个问题是很常见的——当前的Fortran编译器通常提供一个编译器开关来保存所有变量。对于语言标准来说,要求所有局部变量保留其值是愚蠢的。但是一个中间的要求是,要拯救许多不小心使用“save”的程序,就需要在声明中初始化的所有变量自动具有save属性。因此你发现了…… |
![]() |
Fib · 查找R包中使用的Fortran文件 3 年前 |
![]() |
Holmz · 使用ifort 2020和OneAPI更改字符串行为? 3 年前 |
![]() |
imronuke · nvfortran编译器有用标志的建议 3 年前 |
![]() |
R. N · gfortran指针过程类型问题 7 年前 |
![]() |
ptb · 将Torvalds的“好品味”应用于Fortran链表 7 年前 |