我已经将Fortran PowerStation(4.0)中的一些Fortran代码移植到Fortran 11(2003)编译器中。为了在旧编译器和新编译器之间保持double
和real
值,我将properties>fortran>data>"Default Read Kind"
从4更改为8.现在问题是全局变量不维护来自一个文件的数据到其他人。
假设我在一个文件中创建一个名为real*8
的{{1}}变量作为全局变量(abc
)。它在一个文件中修改并在另一个文件中使用。检查第二个文件中COMMON/test/abc
变量的值时,发现它不包含修改后的数据。仅当我将abc
更改为8时才会发生这种情况。
我还需要从属性窗口修改其他选项吗?
请给出解决方案。提前谢谢。
答案 0 :(得分:1)
我对你使用的编译器,你做了哪些修改等等有点不清楚,所以我的回答有点犹豫。
我不确定将默认的真实类型从4更改为8会保持您认为的值。您似乎认为旧编译器上的真实(kind = 4)与新编译器上的real(kind = 8)相同。这可能是真的,但对我来说似乎不太可能。
然而,不要陷入认为真实(kind = 4)必须意味着4字节IEEE兼容浮点数,或者真实(kind = 8)必须意味着8字节IEEE fp的陷阱数。对于大多数编译器来说都是如此,当然对于我最近使用的所有编译器都是如此,但Fortran标准并不要求它。您的旧编译器可能意味着与新编译器的含义不同。
最后,当我在Fortran程序中更改实数时,我经常遇到常见块的问题。最好的解决方案是用模块变量替换公共块。如果你不能这样做,请仔细检查常用声明,记住common是指向编译器如何在内存中放置变量的指令。如果在公共块的一个声明中更改变量的大小而在另一个声明中没有,则会出现问题。
此致
标记