2013-08-05 34 views
1

在我的fortran代码中,我试图包含一个DO循环,但最后我得到了“DO循环或BLOCK IF未关闭”。如果在INCLUDE语句之后的任何其他DO循环打开,它会将它们视为嵌套循环,这表明包含的开放DO行被正确解释,但不是END DO语句。我已经将包含的代码简化为简单的代码,以确保它是循环,而不是循环中的语句给出问题。控制变量在DO循环之前声明。在包含文件中使用Do-Loop

DO A = 1,3 
END DO 

Fortran77不允许INCLUDE文件中的DO循环?

我使用gfortran编译器,如果它变化很大。

编辑:语法

EDIT2: 我使用GCC 4.6.2。现在要注意的是,如果这有所作为,gfortran将从PSCAD生成的makefile运行。我可以提供有关该信息是否恰当的信息。

下面是遇到此问题的代码:

TEST.F:

SUBROUTINE TESTFX() 
INTEGER A 
INCLUDE '../HDR.INC' 
END 

HDR.INC:

DO A = 1,3 
END DO 

EDIT3:在代码编辑拼写错误,并从子程序返回删除。

+0

我猜那些流浪引号结束和结束后做是无意的。包含实际上是在自己的路线上?我会做一个清理编辑,但也许东西是你的问题。 – agentp

+0

什么是您获得的错误消息的完整和准确的文本?像乔治一样,我认为格式和引号不在您的原始来源中。 –

+0

“TEST.f的第6行出错:DO循环或BLOCK IF未关闭”是错误。另外,我做了一个假设PSCAD一直使用gfortran,这是不正确的。 PSCAD实际上是使用f2c编译的,我不确定f2c是否使用g77,它与makefile所调用的f2c位于同一目录中。这最终成为编译语句:“f2c.exe -r8 -w -Nn5000 -NL400 -Nx400 -I”C:\ PROGRA〜1 \ PSCAD42 \ emtdc \ gnu \ inc“-I”C:\ PROGRA〜1 \ PSCAD42 \ emtdc \ gnu \ windows“-g TEST.f”。 –

回答

1

Fortran 77根本没有INCLUDE。首先在Fortran 90中以Fortran标准出现。这就是说,INCLUDE在几乎所有的Fortran 77编译器中都可以作为扩展使用,并且行为也是一样的 - 它与在源文件中插入包含文件基本相同INCLUDE出现在那里。虽然我已经看到编译器与包含跨越包含文件边界的块结构相关的问题发生争执,但对此可以有什么限制。

也许如果您同时包含源文件和包含文件文本,并且告诉我们您正在使用哪个版本的gfortran,则可以提供更明确的响应。

+0

我正在使用GCC 4.6.2。现在要注意的是,如果这有所作为,gfortran将从PSCAD生成的makefile运行。我可以提供有关该信息是否恰当的信息。 下面是遇到此问题的代码: TEST.F: '子程序TESTFX() 整数 包括' ../HDR.INC ' RETURN END' HDR.INC: '呢A = 1,3 END DO' –

+0

对不起,试图添加代码到评论回复。我用一些示例代码更新了我的问题。 –

0

你的INCLUDE必须放在一个新行上,它不是声明A的声明的一部分。为什么你在END中有撇号?他们不能在那里。 END之前的RETURN语句也是完全多余的。尝试:

TEST.F:

SUBROUTINE TESTFX() 

INTEGER A 

INCLUDE '../HDR.INC' 

END SUBROUTINE 

HDR.INC:

DO A = 1,3 
END DO 
+0

对不起,撇号和换行符。修复了帖子。是复制粘贴的产品。您提供的代码与我为它保存的return语句和end子例程语句完全一样。我试图运行删除return语句并将“END”更改为“END SUBROUTINE”,但仍然存在相同的问题,并且编译器报告了“END SUBROUTINE”行的语法错误。 –