Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran 缺省实类移植问题_Fortran - Fatal编程技术网

Fortran 缺省实类移植问题

Fortran 缺省实类移植问题,fortran,Fortran,我已经将一些Fortran代码从Fortran PowerStation(4.0)移植到Fortran 11(2003)编译器。为了在新旧编译器之间保持double和real值,我将properties>fortran>data>的“默认读取种类”从4改为8。现在的问题是,全局变量没有维护从一个文件到另一个文件的数据 假设我在一个文件中创建一个名为abc的real*8变量作为全局变量(COMMON/test/abc)。它在一个文件中修改,并在另一个文件中使用。检查第二个文件中的abc变量值时,发

我已经将一些Fortran代码从Fortran PowerStation(4.0)移植到Fortran 11(2003)编译器。为了在新旧编译器之间保持
double
real
值,我将
properties>fortran>data>的“默认读取种类”
从4改为8。现在的问题是,全局变量没有维护从一个文件到另一个文件的数据

假设我在一个文件中创建一个名为
abc
real*8
变量作为全局变量(
COMMON/test/abc
)。它在一个文件中修改,并在另一个文件中使用。检查第二个文件中的
abc
变量值时,发现该变量不包含修改后的数据。只有当我将“默认真实种类”更改为8时,才会发生这种情况

是否需要从“属性”窗口修改其他选项


请给出一个解决方案。提前谢谢。

我不太清楚您使用的是什么编译器,您做了什么修改等等,所以我的答案有点犹豫

我不确定将默认实数种类从4更改为8是否会保持您认为的值。您似乎认为旧编译器上的real(kind=4)与新编译器上的real(kind=8)具有相同的含义。这可能是真的,但对我来说似乎有点不太可能

但是,不要陷入这样的陷阱:real(kind=4)必须表示符合IEEE标准的4字节浮点数,或者real(kind=8)必须表示8字节IEEE fp数。大多数编译器都是这样,当然我最近使用的所有编译器都是这样,但Fortran标准并不要求这样做。旧编译器的含义可能与新编译器的含义不同

最后,在Fortran程序中更改实数大小时,我通常会遇到公共块的问题。最好的解决方案是用模块变量替换公共块。如果不能做到这一点,请非常仔细地检查公共声明,记住公共声明是编译器关于如何在内存中布局变量的指令。如果在公共块的一个声明中更改变量的大小,而在另一个声明中不更改,则会出现问题

问候

标记