我的任务是维护一些遗留的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)建立了什么背景?
答案 0 :(得分:4)
我认为您不能将COMMON
语句放在FORTRAN 77中的可执行语句下面,请参阅the specification,Sec。 3.5。
只需在任何可执行语句之前将COMMON
语句移动到过程开头附近。