2010-05-16 82 views
0

我一直负责维护一些传统的fortran代码,并且在使用gfortran编译时遇到了麻烦。我已经写了Fortran 95的相当数量的,但是这是我与Fortran 77中第一次经历的这段代码是有问题的一个:这个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,但修复警告并没有解决这个问题。

疯狂的事情是,如果我注释掉所有4条线开始IF='TEST.IN',程序编译和按预期工作,但我必须注释掉所有这些的。留下他们中的任何一个都不会给我带来同样的错误,从common声明开始。如果我注释掉common声明,我会得到相同的错误,从下面一行开始。

我在使用gfortran的OS X Leopard(不是Snow Leopard)。我用这个非常系统来编写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)成立什么情况下?

回答

4

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

+0

啊,当然。我想到了这一点,但我需要将可执行语句向外移动,并且最初并没有将它们移动得足够远。阅读规范帮助解读了我也遇到的其他一些错误。 – notJim 2010-05-16 21:05:30