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
。
假设我有两个 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
。