【问题标题】:gfortran - assign string to parametergfortran - 将字符串分配给参数
【发布时间】:2013-04-23 06:53:47
【问题描述】:

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

我正在编译一个已知可以使用 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?

干杯,

德里克

【问题讨论】:

    标签: fortran gfortran


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢你,一个有用的答案。
    【解决方案2】:

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

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

    在我看来,您的 sn-p 来自 FORTRAN77 之前的日子,当时该语言并未真正承认存在诸如非数字变量之类的新奇想法。在这种情况下,我建议您遵循 gfortran 禁止此代码,而不是 Intel Fortran。

    【讨论】:

    • 谢谢,很高兴知道。我的操作是假设英特尔编译器更“符合”。我会将此报告给代码的原始作者。干杯。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 2013-01-25
    • 1970-01-01
    • 2021-10-21
    • 2021-10-13
    相关资源
    最近更新 更多