我一直在使用-fdefault-real-8
的{{1}}选项自动宣传程序中任何位置声明的每个gfortran
,以提高精度,以及任何常量,例如 REAL
。如果我想切换回单精度,我只需删除该选项并重新编译,而无需更改源代码中的单个字符。
在我开始使用1.23
模块的时候,因为它允许我使用ISO_FORTRAN_ENV
等常量,以及INPUT|OUTPUT|ERROR_UNIT
和IOSTAT_END
等等(似乎是在便携性的方向上是一个好的和容易的举动,我错了吗?)。从那时起,我一直在看到并忽略以下警告
IOSTAT_EOR
因为这种不相容性似乎到目前为止没有效果。
如果有可能并且值得,我现在想摆脱这个警告。
如果我理解正确,为了避免此警告,我应该放弃Warning: Use of the NUMERIC_STORAGE_SIZE named constant from intrinsic module ISO_FORTRAN_ENV at (1) is incompatible with option -fdefault-real-8
选项并将每-fdefault-real-8
更改为REAL
and/or to REAL(real64)
(前提是在后一种情况下,语句REAL(dp)
被放入该单元中),这对USE, INTRINSIC :: ISO_FORTRAN_ENV, dp => real64
或sed
来说并不困难。
尽管如此,在我看来,这种变化与使用vim
选项不同,因为所有常量将保持单精度,只要我没有&#39 ; t添加-fdefault-real-8
给他们。
假设删除了 选项并在任何地方使用了d0
-fdefault-real-8
,是否有任何方法可以使整个程序中的任何常量表现为每个都有ISO_FORTRAN_ENV
后缀?
无论这是否可行,我是否正确地推断出我可以将以下行放在所有其他程序单元使用的单个模块中,然后每个模块都可以使用d0
作为类型参数?
dp
我更喜欢这种方式,因为我可以通过仅更改该行来切换到USE, INTRINSIC :: ISO_FORTRAN_ENV
INTEGER, PARAMETER :: dp = real64
或real32
或其他任何内容。
答案 0 :(得分:2)
如果您只想使警告静音,而您不关心-fdefault-real-8
对存储关联和某些Fortran标准要求的影响,请不要从模块中导入NUMERIC_STORAGE_SIZE
。例如,
USE, INTRINSIC :: ISO_FORTRAN_ENV, only: INPUT_UNIT,OUTPUT_UNIT,ERROR_UNIT
答案 1 :(得分:0)
假设删除了 -fdefault-real-8
选项并在任何地方使用了 ISO_FORTRAN_ENV
,有没有办法让程序中的任何常量表现得像每个常量都有 d0
后缀?
没有
顺便说一句,d0
与 double precision
完全相同,因此也没有太大的吸引力,因为 double precision
的含义允许变化多达 {{ 1}}。
无论这是否可能,我是否正确推断我可以将以下几行放在一个模块中,该模块由所有其他程序单元使用,然后每个程序单元都可以使用 dp 作为类型参数?
是的。这是一种常见的做法。