打印宏的名称和值

Ben*_*Ben 11 c c-preprocessor

我有一个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)

  • 不错! (2认同)