定义宏扩展为文字#

luk*_*mac 0 c c++

可能重复:
c ++预处理器宏扩展到另一个预处理器指令

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

#define M(X) #ifdef FOO \ 
              X=1 \
             #else \ 
              X=2
Run Code Online (Sandbox Code Playgroud)

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

谢谢大家!

Eva*_*ran 6

抱歉,您不能让宏发出另一个宏,因为预处理器是单通道.同样来自c99标准:

(6.10.3.4第3段):

3生成的完全宏替换的预处理标记序列不会作为预处理指令处理,即使它类似于一个,...

c ++也有类似的东西.


peo*_*oro 6

你可以这样做:

#ifdef FOO
    #define M(X) X=1
#else
    #define M(X) X=2
#endif
Run Code Online (Sandbox Code Playgroud)