我有一个C程序,可以使用#defines 启用或禁用许多优化.当我运行我的程序时,我想知道在编译时定义了哪些宏.
所以我试着编写一个宏函数来打印宏的实际值.像这样的东西:
SHOW_DEFINE(X){\
if( IS_DEFINED(X) )\
printf("%s is defined and as the value %d\n", #X, (int)X);\
else\
printf("%s is not defined\n", #X);\
}
Run Code Online (Sandbox Code Playgroud)
但是,我不知道如何使它工作,我怀疑这是不可能的,有没有人知道如何做到这一点?
(请注意,即使未定义宏,也必须编译!)
Dip*_*ick 28
只要你愿意忍受SOMESTRING = SOMESTRING指示尚未定义SOMESTRING的事实(查看它是因为令牌尚未重新定义!?!),那么以下内容应该:
#include <stdio.h>
#define STR(x) #x
#define SHOW_DEFINE(x) printf("%s=%s\n", #x, STR(x))
#define CHARLIE -6
#define FRED 1
#define HARRY FRED
#define NORBERT ON_HOLIDAY
#define WALLY
int main()
{
SHOW_DEFINE(BERT);
SHOW_DEFINE(CHARLIE);
SHOW_DEFINE(FRED);
SHOW_DEFINE(HARRY);
SHOW_DEFINE(NORBERT);
SHOW_DEFINE(WALLY);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
BERT=BERT
CHARLIE=-6
FRED=1
HARRY=1
NORBERT=ON_HOLIDAY
WALLY=
Run Code Online (Sandbox Code Playgroud)