Fortran CPP 类预处理器的替代方案
An alternative to Fortran CPP-like preprocessors
我正在寻找 Fortran 90 代码中 #ifdef #else #enddef
的替代方法。
有没有另一种方法来控制调用模块时执行哪些 use
语句?我想摆脱复杂系统中的 #include
个文件。
比如我现在有这个
#include "defs.h"
module X
#ifdef Sys
use ....
#else
use ....
#endif
implicit none
snip...
#ifdef Sys
some block of code...
#else
some block of code...
#endif
end module X
在defs.h中定义了Sys。我想找到一种替代方法来使用 defs.h 来控制代码的 #ifdef....
部分。
感谢对此的任何想法。
我将首先重复评论中提到的内容:真正解决您的实际问题的正确方法是找出使用 FCM 时编译器找不到您希望包含的文件的原因。
为了解决您的具体问题,由于无法成功 include
提供各种定义的给定文件,我们可以改为通过传递给编译器的参数来定义符号。
考虑以下内容,存储在test.fpp
#ifdef Sys
#warning "This messages tells you Sys is defined"
#else
#warning "This messages tells you Sys is NOT defined"
#endif
program test
implicit none
write(*,'("For clarity we will now print defined if Sys is defined or not defined if Sys is not defined")')
#ifdef Sys
write(*,'("Defined")')
#else
write(*,'("Not defined")')
#endif
end program test
我们可以使用 gfortran -ffree-form test.fpp -o test
编译它。这将产生:
test.fpp:4:2: warning: #warning "This messages tells you Sys is NOT defined" [-Wcpp]
#warning "This messages tells you Sys is NOT defined"
^
并执行 ./test
给出输出
For clarity we will now print defined if Sys is defined or not defined if Sys is not defined
Not defined
如果我们现在使用 gfortran -ffree-form test.fpp -o test -DSys
编译,我们会看到消息
test.fpp:2:2: warning: #warning "This messages tells you Sys is defined" [-Wcpp]
#warning "This messages tells you Sys is defined"
^
和运行 ./test
给我们
For clarity we will now print defined if Sys is defined or not defined if Sys is not defined
Defined
我正在寻找 Fortran 90 代码中 #ifdef #else #enddef
的替代方法。
有没有另一种方法来控制调用模块时执行哪些 use
语句?我想摆脱复杂系统中的 #include
个文件。
比如我现在有这个
#include "defs.h"
module X
#ifdef Sys
use ....
#else
use ....
#endif
implicit none
snip...
#ifdef Sys
some block of code...
#else
some block of code...
#endif
end module X
在defs.h中定义了Sys。我想找到一种替代方法来使用 defs.h 来控制代码的 #ifdef....
部分。
感谢对此的任何想法。
我将首先重复评论中提到的内容:真正解决您的实际问题的正确方法是找出使用 FCM 时编译器找不到您希望包含的文件的原因。
为了解决您的具体问题,由于无法成功 include
提供各种定义的给定文件,我们可以改为通过传递给编译器的参数来定义符号。
考虑以下内容,存储在test.fpp
#ifdef Sys
#warning "This messages tells you Sys is defined"
#else
#warning "This messages tells you Sys is NOT defined"
#endif
program test
implicit none
write(*,'("For clarity we will now print defined if Sys is defined or not defined if Sys is not defined")')
#ifdef Sys
write(*,'("Defined")')
#else
write(*,'("Not defined")')
#endif
end program test
我们可以使用 gfortran -ffree-form test.fpp -o test
编译它。这将产生:
test.fpp:4:2: warning: #warning "This messages tells you Sys is NOT defined" [-Wcpp]
#warning "This messages tells you Sys is NOT defined"
^
并执行 ./test
给出输出
For clarity we will now print defined if Sys is defined or not defined if Sys is not defined
Not defined
如果我们现在使用 gfortran -ffree-form test.fpp -o test -DSys
编译,我们会看到消息
test.fpp:2:2: warning: #warning "This messages tells you Sys is defined" [-Wcpp]
#warning "This messages tells you Sys is defined"
^
和运行 ./test
给我们
For clarity we will now print defined if Sys is defined or not defined if Sys is not defined
Defined