这个Fortran '77片段有什么问题?

时间:2010-05-16 20:41:54

标签: macos fortran77 gfortran

我的任务是维护一些遗留的fortran代码,而我在使用gfortran进行编译时遇到了麻烦。我写了相当数量的Fortran 95,但这是我第一次使用Fortran 77。这段代码是有问题的:

      CHARACTER*22 IFILE, OFILE
      IFILE='TEST.IN'
      OFILE='TEST.OUT'
      OPEN(5,FILE=IFILE,STATUS='NEW')   
      OPEN(6,FILE=OFILE,STATUS='NEW')
      common/pabcde/nfghi

当我使用gfortran file.FOR进行编译时,以common语句开头的所有行都是错误(例如Error: Unexpected COMMON statement at (1)为每个后续行,直到达到25个错误限制为止。我用-Wall -pedantic编译,但修复警告并没有解决这个问题。

疯狂的是,如果我注释掉以IF='TEST.IN'开头的所有4条行,程序会按预期编译并运行,但我必须注释掉所有这些< / em>的。保留其中任何一个未注释会给我带来与common语句一样的错误。如果我注释掉common语句,我会得到相同的错误,只需从下一行开始。

我使用gfortran在OS X Leopard(不是Snow Leopard)上。我已经使用这个非常系统gfortran来编写Fortran 95程序,所以理论上编译器本身是理智的。这段代码到底是怎么回事?


修改:使用g77进行编译,提供:

test.FOR: In program `MAIN__':
test.FOR:154: 
     IFILE='TEST.IN'
     1
test.FOR:158: (continued):
     common/pabcde/nfghi
     2
Statement at (2) invalid in context established by statement at (1)

呃,在(1)建立了什么背景?

1 个答案:

答案 0 :(得分:4)

我认为您不能将COMMON语句放在FORTRAN 77中的可执行语句下面,请参阅the specification,Sec。 3.5。 只需在任何可执行语句之前将COMMON语句移动到过程开头附近。