Fortran:有条件使用模块吗?

cst*_*ats 5 conditional fortran module gfortran

假设我有两个名为modA和modB的Fortran模块.有没有办法在基于条件语句的程序中使用其中一个?这需要某种类型的预处理吗?例如,我希望能够执行以下代码:

if (condition)
    use modA
else
    use modB
end
Run Code Online (Sandbox Code Playgroud)

我正在使用GNU Fortran编译器.

Vla*_*r F 6

是的,你必须做某种预处理.最常见的是GNU Fortran中包含的C预处理器.

#if (condition)
    use modA
#else
    use modB
#endif
Run Code Online (Sandbox Code Playgroud)

预处理器不了解您的Fortran代码,它只是一个文本.它有自己的一组指令和它自己的一组变量.只有预处理器变量可以在条件中使用,而不是Fortran变量.

另一个常见指令是#ifdef哪种变体#if defined.有关更多信息,请参阅手册https://gcc.gnu.org/onlinedocs/cpp/Traditional-Mode.html(gfortran以传统模式运行预处理器).

要启用预处理器,请使用-cpp标志或在Unix中,您可以F在文件后缀中使用capital .