gfortran 中的条件编译

Nan*_*ndo 7 flags fortran compilation gfortran conditional-statements

我想知道是否可以选择 Fortran 95 例程的不同部分进行编译。

例如,如果我将某个标志传递给 gfortran,那么编译器会选择将哪个部分用于某个函数。if我知道我可以在例程内部使用它,但缺点是if由于速度问题我不希望程序一直运行。我想解决方案应该类似于这个

我正在专门研究一个计算多体系统(例如,一百万)能量的程序。然后我不想if每次都需要在编译时使用不同的能量定义。

我希望这是可能的,并且我的问题很清楚。

Ale*_*lke 4

您可以将类似 C 的预处理器与-cpp命令行选项一起使用。该选项默认情况下未打开(根据下面的 Vladimir F 评论),尽管看起来使用 .F90 文件扩展名(即大写F,而不是.f90)也可以在没有该选项的情况下完成任务-cpp

有关该选项的详细信息:

https://gcc.gnu.org/onlinedocs/gfortran/Preprocessing-Options.html

然后你可以按照你指出的那样做,所以:

#ifdef <some-var>
  code when <some-var> is true
#elif defined(<other-var>)
  code when <other-var> is true
#endif
Run Code Online (Sandbox Code Playgroud)

按要求。

此页面上有更多带有实际代码的示例。

此外,与 C/C++ 一样,您可以使用以下选项在命令行上定义宏-D

gfortran -DCASE1=3 ...
Run Code Online (Sandbox Code Playgroud)

这将CASE1用值定义3。如果不指定值,则1自动分配给宏。这记录在同一页上。