我的任务是维护一些遗留的 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 statements at (1)
,直到达到 25 个错误限制)。我使用 -Wall -pedantic
进行编译,但修复警告并没有解决这个问题。
疯狂的是,如果我注释掉以 IF='TEST.IN'
开头的所有 4 行,程序就会按预期编译并运行,但是我必须全部注释掉。如果不注释它们中的任何一个,就会出现从 common
语句开始的相同错误。如果我注释掉 common
语句,我会得到相同的错误,只是从下一行开始。
我在 OS X Leopard(不是 Snow Leopard)上使用 gfortran
。我已经广泛使用这个系统和 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) 处建立了什么上下文?
I've been tasked with maintaing some legacy fortran code, and I'm having trouble getting it to compile with gfortran. I've written a fair amount of Fortran 95, but this is my first experience with Fortran 77. This snippet of code is the problematic one:
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
When I compile with gfortran file.FOR
, all lines starting with the common
statement are errors (e.g. Error: Unexpected COMMON statement at (1)
for each following line until it hits the 25 error limit). I compiled with -Wall -pedantic
, but fixing the warnings did not fix this problem.
The crazy thing is that if I comment out all 4 lines starting with IF='TEST.IN'
, the program compiles and works as expected, but I must comment out all of them. Leaving any of them uncommented gives me the same errors starting with the common
statement. If I comment out the common
statement, I get the same errors, just starting on the following line.
I am on OS X Leopard (not Snow Leopard) using gfortran
. I've used this very system with gfortran
extensively to write Fortran 95 programs, so in theory the compiler itself is sane. What the hell is going on with this code?
Edit: Compiling with g77 gives:
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)
Er, what context is established at (1)?
发布评论
评论(1)
我认为您不能将
COMMON
语句放在 FORTRAN 77 中的可执行语句下面,请参阅 规范,第 2 节3.5.只需将
COMMON
语句移至靠近过程开头、任何可执行语句之前即可。I don't think you can put
COMMON
statements below the executable statements in FORTRAN 77, see the specification, Sec. 3.5.Just move the
COMMON
statement close to the beginning of the procedure, before any executable statement.