1

在我的 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 运行的。如果相关的话,我可以提供这方面的信息。

这是遇到此问题的代码:

测试.F:

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

HDR.INC:

DO A = 1,3 
END DO

Edit3:编辑代码中的错别字并从子程序中删除 RETURN。

4

2 回答 2

1

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

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

于 2013-08-05T16:17:04.433 回答
0

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

测试.F:

SUBROUTINE TESTFX() 

INTEGER A

INCLUDE '../HDR.INC' 

END SUBROUTINE

HDR.INC:

DO A = 1,3 
END DO
于 2013-08-05T18:17:26.920 回答