Fortran中的格式声明与gfortran

时间:2012-09-14 05:25:20

标签: fortran gfortran

嗨,这是Chapman的书“Fortran 95-2003”中为科学家和工程师提供的代码(3ed),第195页

WRITE (*,100) index, time, depth, amplitude, phase

100 FORMAT('1',t20,'results for the test number  ',i3,///,&
      1x,'time      = ',f7.0/, &
      1x,'depth     = ',f7.1,' meters',/, &
      1x,'amplitude = ',f8.2/ &,
      1x,'phase     = ',f7.1)

为了运行它,我完成了其余的陈述

program test
implicit none

INTEGER :: index = 10
real:: time=300.0,depth=330.0,amplitude=850.65,phase=30.0
WRITE (*,100) index, time, depth, amplitude, phase

100 FORMAT('1',t20,'results for the test number  ',i3,///,&
      1x,'time      = ',f7.0/, &
      1x,'depth     = ',f7.1,' meters',/, &
      1x,'amplitude = ',f8.2/ &,
      1x,'phase     = ',f7.1)

end program test 

当我用gfortran编译它时,我得到以下错误..

test.f90:12.31:

      1x,'amplitude = ',f8.2/ &,
                               1
Error: Unexpected element '&' in format string at (1)
test.f90:13.8:

      1x,'phase     = ',f7.1)
        1
Error: Non-numeric character in statement label at (1)
test.f90:13.9:

      1x,'phase     = ',f7.1)
         1
Error: Invalid character in name at (1)
test.f90:7.12:

WRITE (*,100) index, time, depth, amplitude, phase
            1
Error: FORMAT label 100 at (1) not defined

这里发生了什么?我在stackoverflow上看到了另一个线程,其中的问题是关于fortran中的控制字符。 Chapman在他的书中讨论了它,但没有提到在Fortran 2003中删除了控制字符的功能。所以我想知道这是否是gfortran无法识别的旧东西?

1 个答案:

答案 0 :(得分:4)

格式规范行上的&符后面有一个逗号,其中包含'ampersand ='文字。要在非字符上下文中充当连续字符,“&”必须是该行上的最后一个非空白,非注释字符。

逗号应该在&符之前。

(因为&符号不被视为延续字符,编译器认为它是格式规范的一部分 - 因此是第一个错误。然后下一行开始一个新语句 - 因此后续错误。)< / p>