C++ 定义扩展为文字的宏#
可能重复:C++ 定义扩展为文字的宏#,c++,c,C++,C,可能重复: 我的问题很简单:我想在宏展开中使用“#”,例如,定义一个marco'M(X)': 我尝试使用“\”来转义“\”,但“\”被解释为宏展开的换行符,而不是转义字符。 那么如何在宏展开中使用“#” 谢谢大家 抱歉,您不能让一个宏发出另一个宏,因为预处理器是单通道的。同样来自c99标准: (6.10.3.4第3段): 3.由此产生的结果完全不同 宏替换的预处理令牌 序列未作为 预处理指令,即使它 像一个 c++也有类似的功能。您可以做相反的操作: #ifdef FOO #defin
我的问题很简单:我想在宏展开中使用“#”,例如,定义一个marco'M(X)': 我尝试使用“\”来转义“\”,但“\”被解释为宏展开的换行符,而不是转义字符。 那么如何在宏展开中使用“#”
谢谢大家 抱歉,您不能让一个宏发出另一个宏,因为预处理器是单通道的。同样来自c99标准: (6.10.3.4第3段): 3.由此产生的结果完全不同 宏替换的预处理令牌 序列未作为 预处理指令,即使它 像一个
c++也有类似的功能。您可以做相反的操作:
#ifdef FOO
#define M(X) X=1
#else
#define M(X) X=2
#endif
正如@Evan所指出的,宏扩展是在一次过程中完成的,因此您的示例将不起作用。然而,这里有一个替代方案,可以满足您的需求,尽管只需要几行
#ifdef FOO
#define FOOVAL 1
#else
#define FOOVAL 2
#endif
#define M(X) X=FOOVAL
+似乎是一个合理的解决方案。你的解决方案非常适合我的需要,掌声!没想到回复这么快又准确,敬礼!你应该接受任何你认为有用的答案。(单击复选标记并将其变为绿色。)
#ifdef FOO
#define FOOVAL 1
#else
#define FOOVAL 2
#endif
#define M(X) X=FOOVAL