Joh*_*den 23 c macros gcc pragma c-preprocessor
到目前为止,我已经达到了:
#define ADEFINE "23"
#pragma message ("ADEFINE" ADEFINE)
Run Code Online (Sandbox Code Playgroud)
哪个有效,但如果ADEFINE不是字符串怎么办?
#define ADEFINE 23
#pragma message ("ADEFINE" ADEFINE)
Run Code Online (Sandbox Code Playgroud)
原因:
警告:格式错误的'#pragma message',被忽略
理想情况下,我希望能够处理任何值,包括undefined.
rob*_*05c 26
#define STRINGIFY(s) XSTRINGIFY(s)
#define XSTRINGIFY(s) #s
#define ADEFINE 23
#pragma message ("ADEFINE=" STRINGIFY(ADEFINE))
Run Code Online (Sandbox Code Playgroud)
如果你有/想要提升,你可以使用boost stringize为你做:
#include <boost/preprocessor/stringize.hpp>
#define ADEFINE 23
#pragma message ("ADEFINE=" BOOST_PP_STRINGIZE(ADEFINE))
Run Code Online (Sandbox Code Playgroud)
我不确定这是否能满足您的需求,但是如果您只对此感兴趣来调试偶然的宏问题(因此不需要在每次编译的消息中显示它),以下内容可能对您有用.使用gcc -E -dD
选项转储#define
指令以及预处理输出.然后通过管道grep
只看到你想要的线:
// test.c
#include <stdlib.h>
#include <stdio.h>
#define ADEFINE "23"
#include <string.h>
int main(int argc, char *argv[])
{
#undef ADEFINE
#define ADEFINE 42
return 0;
}
Run Code Online (Sandbox Code Playgroud)
该命令gcc -E -dD -c test.c | grep ADEFINE
显示:
#define ADEFINE "23"
#undef ADEFINE
#define ADEFINE 42
Run Code Online (Sandbox Code Playgroud)