Fortran:有没有办法有条件地使用模块?

Fortran: Is there a way to conditionally use modules?

假设我有两个 Fortran 模块,分别称为 modA 和 modB。有没有办法在基于条件语句的程序中使用一个或另一个?这是否需要某种类型的预处理?例如,我希望能够执行类似以下代码的操作:

if (condition)
    use modA
else
    use modB
end

我正在使用 GNU Fortran 编译器。

是的,您必须进行某种预处理。最常见的是 GNU Fortran 中包含的 C 预处理器。

#if (condition)
    use modA
#else
    use modB
#endif

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

另一个常见的指令是 #ifdef,它是 #if defined 的变体。更多内容参见手册https://gcc.gnu.org/onlinedocs/cpp/Traditional-Mode.html(gfortran以传统模式运行预处理器)

要启用预处理器,请使用 -cpp 标志,或者在 Unix 中,您可以在文件后缀中使用大写字母 F