3

我试图编译以下内容,gfortran 和 ifort 都报告了语法错误:

module test
implicit real*8 (a-h,o-z)
allocatable, save :: A(:)
end module test

这是gfortran -c test.f90输出:

allocatable, save :: A(:)
            1
Error: Invalid character in name at (1)

ifort -c test.f90输出:

test.f90(3): error #5277: Syntax error, found ',' following statement keyword
allocatable, save :: A(:)
------------^
test.f90(3): error #5082: Syntax error, found '::' when expecting one of: ( , <END-OF-STATEMENT> ; [
allocatable, save :: A(:)
------------------^
compilation aborted for test.f90 (code 1)

但是,如果没有该save属性,或者通过添加显式类型,它可以很好地编译:

module test
implicit real*8 (a-h,o-z)
allocatable :: A(:)
end module test

module test
implicit real*8 (a-h,o-z)
real*8, allocatable, save :: A(:)
end module test

由于两个编译器都报告了语法错误,我想知道这是否是一个错误,或者是否有人知道可能出了什么问题?

4

1 回答 1

4

这不是一个错误。从最新 Fortran 标准的第 5.4.2 节(或更易读的 Metcalf、Reid 和 Cohen 格式)开始,该allocatable语句可以按以下形式使用:

allocatable [::] array-name [ (array-spec) ] [, array-name [ (array-spec) ]] ...

因此,您必须在单独的语句中使用allocatable和。save您使用的两个编译器都报告了该错误,因为它们需要在 之后的数组名称allocatable,但它们遇到了逗号。

于 2013-10-31T16:52:52.677 回答