我想知道是否可以选择 Fortran 95 例程的不同部分进行编译。
例如,如果我将某个标志传递给 gfortran,那么编译器会选择将哪个部分用于某个函数。我知道我可以在例程中使用
if
来完成此操作,但缺点是由于速度问题,我不希望程序始终运行 if
。我想解决方案应该类似于 this
我正在专门研究一个计算多体系统(例如,一百万)能量的程序。然后我不想每次在编译时需要使用不同的能量定义时都添加
if
。
我希望这是可能的,并且我的问题很清楚。
您可以将类似 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
会自动分配给宏。这记录在同一页上。