gfortran - 将字符串赋值给参数

时间:2013-04-29 14:41:55

标签: fortran gfortran

[注意:包含重复上一个问题,但作为单独的问题单独发布]

我正在编译一个已知使用gfortran使用ifort编译的程序。但是编译器在行

上失败了
PARAMETER (POS='^')  

编译错误:

conv_prof.mac:9.21:
    Included at conv_prof.f:811:

      PARAMETER (POS='^')                                               
                 1
Error: Can't convert CHARACTER(1) to REAL(4) at (1)
make: *** [conv_prof.o] Error 1

事实证明POS参数没有被使用(它可能是遗留参数)所以我可能只是取消注释这行来编译,但我想知道是否有人可能知道为什么这是gfortran中的一个问题而不是ifort?

干杯,

德里克

2 个答案:

答案 0 :(得分:3)

英特尔编译器是一系列Fortran编译器的后代。它的祖先实现了各种非标准的行为,并且在Fortran的真正精神中,最新版本的编译器应该编译最古老的代码。您可以通过明智地使用编译器标志告诉ifort警告代码中的非标准功能。

另一方面,gfortran(默认情况下)不会以非标准语法的方式接受很多,除了那些被广泛使用的非标准语法形式,许多毫无戒心的程序员认为它们是标准表格(例如real*4等)。

你的代码片段让我想起来自FORTRAN77之前的日子,当时语言并没有真正承认存在像非数字变量这样的新奇想法。在这种情况下,我建议您遵循gfortran禁止使用此代码,而不是英特尔Fortran。

答案 1 :(得分:2)

这里的具体扩展是ifort允许程序将字符值“赋值”到真实对象中。也许它打算使用这个扩展 - 但更可能的解释是在PARAMETER语句之前缺少参数pos的类型声明语句。

从技术上讲,我不认为标准在这种情况下需要诊断(这不违反语法规则或标准的约束 - 这违反了正文中对程序的要求) ,但是如果您打开标准检查(/stand-stand,则会从ifort获得诊断,具体取决于您的平台)。