在C ++中,可以使用宏来使用参数作为宏名来定义宏吗?

时间:2017-12-11 01:04:16

标签: c++ macros preprocessor

我想用宏在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 )

有没有办法做到这一点? 我对此表示怀疑,但不妨提出这样的问题:)

1 个答案:

答案 0 :(得分:1)

没有。虽然预处理器可以支持多级令牌替换(一个宏可能引用另一个宏),但这仅适用于令牌。您无法生成新的预处理程序指令。

换句话说,你可以通过

解决这个问题
#ifdef TEST_ME
  #define THING ONETHING
#else
  #define THING ANOTHERTHING
#endif
#define DEFINE_ME THING

(或者通过编写C ++代码 - 这些日子真的不需要宏)