定义宏扩展为文字#

时间:2011-01-12 15:35:42

标签: c++ c

  

可能重复:
  c++ preprocessor macro expansion to another preprocessor directive

我的问题很简单:我想在宏扩展中使用“#”,例如,定义一个marco'M(X)':

#define M(X) #ifdef FOO \ 
              X=1 \
             #else \ 
              X=2

我尝试使用'\'来转义'#',但'\'被解释为宏扩展的换行符,而不是转义字符。 那么如何在宏扩展中使用'#'?

谢谢大家!

3 个答案:

答案 0 :(得分:6)

很抱歉,但由于预处理器是单通道,因此您无法让宏发出另一个宏。同样来自c99标准:

(6.10.3.4第3段):

  

3结果完全   宏替换的预处理令牌   序列不作为a处理   预处理指令,即使它   类似于......,

c ++也有类似的东西。

答案 1 :(得分:6)

你可以这样做:

#ifdef FOO
    #define M(X) X=1
#else
    #define M(X) X=2
#endif

答案 2 :(得分:1)

正如@Evan指出的那样,宏扩展只需一次完成,因此您的示例将无效。然而,这里有一个替代方案可以做你想要的,尽管还有几行。

#ifdef FOO
#define FOOVAL 1
#else
#define FOOVAL 2
#endif

#define M(X) X=FOOVAL