Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 定义扩展为文字的宏#_C++_C - Fatal编程技术网

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