Fortran中的变量初始化

时间:2014-12-04 04:36:13

标签: fortran fortran90

在Nyhoff撰写的Fortran一书中,p。在图51中,声明变量可以通过常数表达式"来初始化。然而,Nyhoff似乎并没有说明究竟是一个常数表达式。

问题1:变量是否可以由用户定义的函数初始化?例如:real :: myreal=myrealfunc(4.0)(变量可以通过内部函数初始化。)

问题2:这与问题1没有直接关系。考虑一个主程序没有use特定模块,而是其中一个子程序use这个模块的情况。如果变量是该模块的一部分,它是在主程序执行开始时初始化,还是直到子程序(模块use被调用)?

参考资料(如果有的话)也会有所帮助。

2 个答案:

答案 0 :(得分:2)

答案1:不可以,用户定义的函数无法初始化变量。 R505(我在我面前的Fortran 2008标准草案中)说,变量只能由 constant-expr 初始化。同一文档的第7.1.12.1节定义了 constant-expr 并包含单词这是一个表达式,其中每个操作都是内在的

答案2:use - d变量只能在use - d的范围内访问。当它实际初始化是一个有争议的点。我怀疑它是依赖于处理器的(因为该术语在标准的第1.3.114节中定义)。

我还怀疑编译器会在程序启动时初始化。虽然标准不需要它,但几乎没有提示,初始化表达式实际上可能是由编译器计算的。我想你可以通过检查初始化大变量的程序的内存消耗来弄清楚处理器的行为。当变量不在范围内时,您将无法在执行期间简单地打印或检查变量。

当然,初始化的变量获取save属性,这意味着它们的值将保存在其封闭范围的调用中。

标准中用于验证此答案的参考目前正在逃避。

答案 1 :(得分:2)

对于第一个问题,我将采用与High Performance Mark's answer第7.1.12.1段相同的起点,但对其略有不同的解释。我会得出同样的结论。

是的,常量表达式中的每个操作都必须是内在的,但是对问题中的用户定义函数的引用不是一个操作。相反,它是主要,并且在该段落中包含允许的原色列表。

也就是说,从后面的子段(4--8)中允许的主要案例开始,每个函数引用必须是一个内在函数。