到目前为止,我已经到了:
#define ADEFINE "23"
#pragma message ("ADEFINE" ADEFINE)
哪个有效,但是如果ADEFINE不是字符串怎么办?
#define ADEFINE 23
#pragma message ("ADEFINE" ADEFINE)
导致:
警告:格式错误的'#pragma message',忽略
理想情况下,我希望能够处理任何值,包括undefined。
答案 0 :(得分:25)
要显示非字符串的宏stringify the macro:
#define STRINGIFY(s) XSTRINGIFY(s)
#define XSTRINGIFY(s) #s
#define ADEFINE 23
#pragma message ("ADEFINE=" STRINGIFY(ADEFINE))
如果您有/ boost,可以使用boost stringize为您执行此操作:
#include <boost/preprocessor/stringize.hpp>
#define ADEFINE 23
#pragma message ("ADEFINE=" BOOST_PP_STRINGIZE(ADEFINE))
答案 1 :(得分:6)
我不确定这是否能满足您的需求,但如果您只是对此感兴趣来调试偶然的宏问题(因此不需要在每次编译的消息中显示这些内容),可能会出现以下情况:为你工作。使用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;
}
命令gcc -E -dD -c test.c | grep ADEFINE
显示:
#define ADEFINE "23"
#undef ADEFINE
#define ADEFINE 42