Fortran 2003中未初始化的变量

时间:2009-07-21 11:40:19

标签: fortran

与f90相比,为什么变量在2003年的fortran中没有初始化为零?

我在文件的函数中有一个变量。它初始化为0.我想使用它另一个函数然后它显示一个垃圾值。即使是全局变量也是如此。我需要为fortran 2003编译器设置任何选项吗?

4 个答案:

答案 0 :(得分:7)

您可以尝试使用-zero或/ Qzero - 这些会将本地标量初始化为零 - 但您确实应该明确设置初始值。正如您所知,根据编译器为您执行此操作,是一种引入错误的好方法。请注意,不同编译器的选项名称可能不同。提到的是Intel Visual Fortran

答案 1 :(得分:4)

我们经历过从Compaq Visual Fortran到Intel Visual Fortran的这一过程。尽管他不熟悉Fortran编译器,但是Workshop Alex留下的整个帖子都是正确的 - 你不应该依赖编译器设置初始值。标准没有说应该自动设置变量值。即使这样做,依赖于这种编译器行为也是有风险的。

Compaq Visual Fortran自动初始化变量。其他编译器没有。您的代码需要修复。你只能通过初始化所有变量来做到这一点。

约翰

答案 2 :(得分:3)

我对任何Fortran编译器都不熟悉,但我知道一般来说,大多数编译器都不会初始化全局变量和局部变量。应始终在代码中完成初始化。您不应该依赖编译器为您执行此操作。 你看到的垃圾可能来自堆栈或内存堆。一些编译器在分配内存时会用零填充堆,这可以解释为什么一些编译器似乎用0初始化变量。它们实际上没有初始化任何东西,它们只是使用恰好填充零的内存区域。

答案 3 :(得分:2)

Fortran 90和Fortran 2003在变量初始化方面没有区别。所有有效的Fortran 90代码都是有效的Fortran 2003,并且应该给出相同的结果(除了极少数模糊的角落情况,其中标准现在指定了编译器相关的行为;这不是其中之一)。

现在,至于为什么你会看到差异,很难说不知道你的编译器是什么,以及你的代码究竟做了什么。我强烈怀疑你依赖于编译器相关的行为,并且在你改变编译器时它就崩溃了。