gfortran 中的条件编译

问题描述 投票:0回答:1

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

例如,如果我将某个标志传递给 gfortran,那么编译器会选择将哪个部分用于某个函数。我知道我可以在例程中使用

if
来完成此操作,但缺点是由于速度问题,我不希望程序始终运行
if
。我想解决方案应该类似于 this

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

if

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

compilation fortran conditional-statements gfortran flags
1个回答
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

按要求。

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

此外,与 C/C++ 一样,您可以使用

-D
选项在命令行上定义宏:

gfortran -DCASE1=3 ...

这将用值

CASE1
定义
3
。如果您未指定该值,则
1
会自动分配给宏。这记录在同一页上。

© www.soinside.com 2019 - 2024. All rights reserved.