gfortran 不允许具有不同组件长度的字符数组
Posted
技术标签:
【中文标题】gfortran 不允许具有不同组件长度的字符数组【英文标题】:gfortran does not allow character arrays with varying component lengths 【发布时间】:2014-02-28 10:03:21 【问题描述】:请看下面的例子
program test
character(10),dimension(5):: models = (/"feddes.swp", "jarvis89.swp", "jarvis10.swp" , "pem.swp", "van.swp"/)
end
返回如下错误:
(1) 处的数组构造函数中的不同字符长度 (10/12)
ifort 编译器没有错误。为什么 gfortran 会出现这种情况,有什么办法可以规避这个问题?
【问题讨论】:
错误是关于右手边。数组构造函数中的字符必须具有相同的长度,或者必须在构造函数的开头指定长度(仅在 F2003 中可用)。 LHS 无关紧要。 感谢您的解释,但是您知道为什么 ifort 编译器会毫无错误地接受我发布的示例吗? @MarcosAlex 我对 F2008 的解读是编译器不需要诊断代码中的错误。这可能只是一个有用的扩展。 【参考方案1】:ifort 接受原始代码,但它不是标准的 fortran,因此来自 gfortran 的错误。如果您向 ifort 提供选项 -std
,它将在编译器允许此类扩展时打印警告。
【讨论】:
【参考方案2】:您在构造函数中有一些长度为 12,因此使用长度 12 可能会更好。
另外,改用
character(len=12), dimension(5) :: models = [character(len=12) :: "feddes.swp", &
"jarvis89.swp", "jarvis10.swp", "pem.swp", "van.swp"]
如果你有编译器支持,可能会更好
character(len=*), dimension(*) :: ...
【讨论】:
好,我不知道这种字符语法。 你们展示了,正如 Vladimir F 所建议的那样,如何在构造函数的开头指定长度。不过,我想知道:为什么 ifort 接受(编译中没有错误或警告)我发布的示例? 编译器可能需要能够检测代码中的错误,但您可能有一个标志可以让它更轻松。试试-warn all
。也就是说,除非您禁止,否则它可能会接受它作为扩展。
我按照你的建议做了,但没有显示任何警告。此外,当我执行打印向量的值时,它表现良好。它似乎有一些不符合标准的东西以上是关于gfortran 不允许具有不同组件长度的字符数组的主要内容,如果未能解决你的问题,请参考以下文章
长度参数化的传递对象到类型绑定过程有 gfortran 抱怨