3

我有一组构成 FORTRAN 代码的 .F 和 .H 文件。我在编译 .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 文件或什么?

4

1 回答 1

8

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

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

于 2011-05-03T16:42:58.397 回答