字符串化运算符#

Olb*_*a12 1 c

#运算符的目的是什么,称为字符串化运算符,它是如何使用的?

我的书以下面的方式描述#,光头部分是我不明白的.

字符串化器操作符#必须后跟一个参数,并且它们将替换为从参数的标记构造的字符串文字,这些字符串文字不会被首先替换.即,以下输入:

#define W 124
#define str(a) (#a)

str(W)
Run Code Online (Sandbox Code Playgroud)

产生输出:

"W"

如果我们想要一个带有宏定义的字符串文字,我们必须使用两个类似函数的宏:

 #define W 124
 #define xstr(a) (#a)
 #define str(b) (xstr(b))
Run Code Online (Sandbox Code Playgroud)

产生输出

"124"

这样做的原因是参数b的参数在str的replacement-list中替换参数之前被完全替换,这意味着xstr的调用将使用124作为参数,然后在xstr中进行字符串化

jpo*_*ian 5

因此,要理解这一点,请考虑预处理器如何处理这些事情.在第一个例子中我们可以看到

#define W 124
#define str(a) (#a)

str(W)
Run Code Online (Sandbox Code Playgroud)

将按如下方式处理str(W) -> #W -> "W".

现在,如果我们把第二个例子这个

#define W 124
#define xstr(a) (#a)
#define str(b) (xstr(b))

str(W)
Run Code Online (Sandbox Code Playgroud)

将按如下方式处理:str(W) -> xstr(124) -> #124最后"124"