2013-04-29 96 views
0

[注:包含前一个问题的重复,但作为单独的问题分别转贴]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?

干杯,

德里克

回答

3

英特尔编译器的Fortran编译器中长线的后裔。它的祖先实现了各种非标准行为,并且按照Fortran的真实精神,最新版本的编译器应该编译最古老的代码。您通常可以通过明智地使用编译器标志来告知ifort警告代码中的非标准功能。另一方面,gfortran不会(默认情况下)接受很多非标准语法,除非那些非常规的非标准语法形式被广泛使用,许多毫无戒心的程序员认为它们是标准形式(例如real*4等)。

您的片段看起来我之前来自天FORTRAN77当语言没有真正承认这种新奇的想法,非数值变量的存在。在这种情况下,我建议您遵循gfortran禁止此代码,而不是英特尔Fortran。

+0

谢谢你,这是很好的了解。我在假设intel编译器更“符合”的情况下运行。我会将此回报给代码的原始作者。干杯。 – dmon 2013-04-29 14:55:22

2

这里的特定扩展名是ifort允许程序“分配”字符值变成一个真正的对象。也许它打算使用此扩展名 - 但更可能的解释是参数pos的类型声明语句在PARAMETER语句之前丢失。

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

+0

谢谢,有用的答案。 – dmon 2013-05-01 10:16:39