gfortran不允许具有不同组件长度的字符数组

gfortran不允许具有不同组件长度的字符数组,fortran,fortran90,gfortran,Fortran,Fortran90,Gfortran,请参见下面的示例 program test character(10),dimension(5):: models = (/"feddes.swp", "jarvis89.swp", "jarvis10.swp" , "pem.swp", "van.swp"/) end 返回以下错误: (1)处数组构造函数中的不同字符长度(10/12) ifort编译器没有错误。为什么gfortran会出现这种情况?有什么方法可以避免这个问题吗?构造函数中有一些长度12,所以最好使用长度12 另外

请参见下面的示例

 program test

 character(10),dimension(5):: models = (/"feddes.swp", "jarvis89.swp", "jarvis10.swp" ,   "pem.swp", "van.swp"/)

end
返回以下错误:

(1)处数组构造函数中的不同字符长度(10/12)


ifort编译器没有错误。为什么gfortran会出现这种情况?有什么方法可以避免这个问题吗?

构造函数中有一些长度12,所以最好使用长度12

另外,使用

character(len=12), dimension(5) :: models = [character(len=12) :: "feddes.swp", &
                "jarvis89.swp", "jarvis10.swp", "pem.swp", "van.swp"]
如果您有编译器支持,可能更好的是

character(len=*), dimension(*) :: ...

ifort接受原始代码,但它不是标准fortran,因此gfortran会产生错误。如果您将选项
-std
提供给ifort,当编译器允许这样的扩展时,它将打印警告。

错误在右侧。数组构造函数中的字符必须具有相同的长度,或者必须在构造函数的开头指定长度(仅在F2003中可用)。LHS是不相关的。谢谢你的解释,但是你知道为什么ifort编译器会毫无错误地接受我发布的示例吗?@MarcosAlex我对F2008的理解是编译器不需要诊断代码中的错误。这可能只是一个有用的扩展。很好,我不知道字符的语法。正如Vladimir F所建议的,你们展示了如何指定构造函数开头的长度。不过,我想知道:为什么ifort接受(编译中没有错误或警告)我发布的示例?编译器可能需要能够检测代码中的错误,但您可能有一个允许它更轻松的标志。尝试
-警告所有人
。也就是说,它可以接受它作为一个扩展,除非你禁止。我按照你的建议做了,但没有显示任何警告。另外,当我打印向量的值时,它的性能很好。它似乎有一些不符合标准的东西