我有一个.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文件或什么?
答案 0 :(得分:7)
你不编译那些。如果你grep其他fortran文件,你会看到它们被包含在include HEAD.h
或'#include“head.h”'之类的内容中(第二个是我的猜测;我猜你是在fortran文件上运行C预处理器)。那些include语句基本上是在.h文件的副本中读取的,无论include语句在编译过程中是什么。所以它是一段使用过的代码,但从未编译过。
在Fortran中包含头文件不再是不最佳实践,尤其是因为它们习惯于通过代码广泛分发公共块。所以不要使用这种方法编写任何新代码。但这就是这个特殊的旧代码正在做的事情。