我想用宏在C ++中定义另一个宏。如果宏定义宏有两个参数,一个是宏的名称来做" #ifdef"测试,另一个是#define的新宏的名称。这个例子被削减了。真实情况很复杂,这就是为什么我要把它分解出来的原因。
#define TEST_ME // or NOT
#define DEFINE_A_MACRO( _test_me_, _define_me_ ) \
\
#ifdef (actual value of)_test_me_ \
#define (actual value of _define_me_) One Thing \
#else \
#define (actual value of _define_me_) Another Thing \
#endif
...
DEFINE_A_MACRO( TEST_ME, DEFINE_ME )
有没有办法做到这一点? 我对此表示怀疑,但不妨提出这样的问题:)
答案 0 :(得分:1)
没有。虽然预处理器可以支持多级令牌替换(一个宏可能引用另一个宏),但这仅适用于令牌。您无法生成新的预处理程序指令。
换句话说,你可以通过
解决这个问题#ifdef TEST_ME
#define THING ONETHING
#else
#define THING ANOTHERTHING
#endif
#define DEFINE_ME THING
(或者通过编写C ++代码 - 这些日子真的不需要宏)