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