在包含文件中使用Do-Loops

时间:2013-08-05 16:00:42

标签: fortran gfortran fortran77 f2c

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

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:在代码中编辑拼写错误并从子例程中删除RETURN。

2 个答案:

答案 0 :(得分:1)

Fortran 77根本没有INCLUDE。它首先出现在Fortran 90中的Fortran标准中。也就是说,INCLUDE在几乎所有的Fortran 77编译器中都可以作为扩展使用,并且行为是相同的 - 它与在源文件中插入包含的文件基本相同INCLUDE出现的位置。虽然我已经看到编译器遇到与跨越包含文件边界的块结构有关的问题,但是对于可以存在的内容没有任何限制。

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

答案 1 :(得分:0)

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

TEST.F:

SUBROUTINE TESTFX() 

INTEGER A

INCLUDE '../HDR.INC' 

END SUBROUTINE

HDR.INC:

DO A = 1,3 
END DO