[注意:包含重复上一个问题,但作为单独的问题单独发布]
我正在编译一个已知使用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?
干杯,
德里克
答案 0 :(得分:3)
英特尔编译器是一系列Fortran编译器的后代。它的祖先实现了各种非标准的行为,并且在Fortran的真正精神中,最新版本的编译器应该编译最古老的代码。您可以通过明智地使用编译器标志告诉ifort
警告代码中的非标准功能。
real*4
等)。
你的代码片段让我想起来自FORTRAN77之前的日子,当时语言并没有真正承认存在像非数字变量这样的新奇想法。在这种情况下,我建议您遵循gfortran禁止使用此代码,而不是英特尔Fortran。
答案 1 :(得分:2)
这里的具体扩展是ifort允许程序将字符值“赋值”到真实对象中。也许它打算使用这个扩展 - 但更可能的解释是在PARAMETER语句之前缺少参数pos
的类型声明语句。
从技术上讲,我不认为标准在这种情况下需要诊断(这不违反语法规则或标准的约束 - 这违反了正文中对程序的要求) ,但是如果您打开标准检查(/stand
或-stand
,则会从ifort获得诊断,具体取决于您的平台)。