小编Jim*_*iot的帖子

使用 GNU gfortran 将宏字符串化

如何使用 GNU gfortran 对预处理器宏进行字符串化?我想将宏定义传递给 GNU gfortran,然后将其用作代码中的字符串。

实际上,我想这样做:

program test
implicit none
character (len=:), allocatable :: astring
astring = MYMACRO
write (*, *) astring
end program test
Run Code Online (Sandbox Code Playgroud)

然后构建:

gfortran -DMYMACRO=hello test.F90
Run Code Online (Sandbox Code Playgroud)

我尝试创建各种宏,例如:

#define STRINGIFY_(x) #x
#define STRINGIFY(x) STRINGIFY_(x)
...
astring = STRINGIFY(MYMACRO)
Run Code Online (Sandbox Code Playgroud)

但这不适用于 gfortran 预处理器。

我还尝试使用不同风格的宏:

#define STRINGIFY(x) "x"
...
astring = STRINGIFY(MYMACRO)
Run Code Online (Sandbox Code Playgroud)

但这只会创建一个包含文本“MYMACRO”的字符串。

然后我尝试将宏定义更改为:

-DMYMACRO=\"hello\"
Run Code Online (Sandbox Code Playgroud)

但这在构建过程中导致了无关的问题。

感谢您的帮助

preprocessor fortran gfortran stringification stringify

7
推荐指数
1
解决办法
1583
查看次数