是否可以在C中打印到stderr预处理器变量的值?例如,我现在拥有的是:
#define PP_VAR (10) #if (PP_VAR > 10) #warning PP_VAR is greater than 10 #endif
但我想做的是:
#define PP_VAR (10) #if (PP_VAR > 10) #warning PP_VAR=%PP_VAR% #endif
在C中这样的事情可能吗?
您可以在visual studio下打印出预处理器变量的值.以下打印出_MSC_VER的值:
#define STRING2(x) #x #define STRING(x) STRING2(x) #pragma message(STRING(_MSC_VER))
不确定这是多么标准.
这适用于GCC 4.4.3:
#define STRING2(x) #x #define STRING(x) STRING2(x) #pragma message "LIBMEMCACHED_VERSION_HEX = " STRING(LIBMEMCACHED_VERSION_HEX)
收益率:
src/_pylibmcmodule.c:1843: note: #pragma message: LIBMEMCACHED_VERSION_HEX = 0x01000017
许多C编译器都支持#warning
(但C标准未定义)。
但是,GCC至少不对后续数据进行预处理,这意味着很难看到变量的值。
#define PP_VAR 123 #warning "Value of PP_VAR = " PP_VAR #warning "Value of PP_VAR = " #PP_VAR #warning "Value of PP_VAR = " ##PP_VAR
GCC产生:
x.c:2:2: warning: #warning "Value of PP_VAR = " PP_VAR x.c:3:2: warning: #warning "Value of PP_VAR = " #PP_VAR x.c:4:2: warning: #warning "Value of PP_VAR = " ##PP_VAR