如何使用* .h文件编译此旧版FORTRAN 77代码?

时间:2011-05-03 16:37:32

标签: fortran header-files fortran-common-block

我有一个.F和.H文件的集合,构成FORTRAN代码。我遇到麻烦来编译.H文件。 .H文件包含一堆公共块。其中一个.H文件的示例是:

*AC HEAD      
c                                                                       HEAD 1
      common/blah/ x(25), y, z(25), p(25,mnv),                          HEAD 2
     1                t(25,mx), d(25,mnv)                               HEAD 3
c                                                                       HEAD 4
ETC...

当我在谷歌搜索答案时,据说.h文件是c / c ++文件,但它们看起来不像是用c / c ++编写的。 gfortran似乎也认为它们是C文件。

当我尝试编译时:

gfortran-4.5 -fdefault-real-8 -fbacktrace -fno-align-commons HEAD.h

我收到了错误:

cc1: warning: command line option "-fdefault-real-8" is valid for Fortran but not for C
cc1: warning: command line option "-fbacktrace" is valid for Fortran but not for C
cc1: warning: command line option "-fno-align-commons" is valid for Fortran but not for C
HEAD.h:1:5: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘HEAD’

我试图注释掉第一行'* AC HEAD',但是错误是关于在*之前查找属性。我是否需要在最后一列中使用HEAD#值来解决这个问题,我是否需要使用C ++编译器构建.H文件或什么?

1 个答案:

答案 0 :(得分:7)

你不编译那些。如果你grep其他fortran文件,你会看到它们被包含在include HEAD.h或'#include“head.h”'之类的内容中(第二个是我的猜测;我猜你是在fortran文件上运行C预处理器)。那些include语句基本上是在.h文件的副本中读取的,无论include语句在编译过程中是什么。所以它是一段使用过的代码,但从未编译过。

在Fortran中包含头文件不再是最佳实践,尤其是因为它们习惯于通过代码广泛分发公共块。所以不要使用这种方法编写任何新代码。但这就是这个特殊的旧代码正在做的事情。