#运算符的目的是什么,称为字符串化运算符,它是如何使用的?
我的书以下面的方式描述#,光头部分是我不明白的.
字符串化器操作符#必须后跟一个参数,并且它们将替换为从参数的标记构造的字符串文字,这些字符串文字不会被首先替换.即,以下输入:
#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中进行字符串化
因此,要理解这一点,请考虑预处理器如何处理这些事情.在第一个例子中我们可以看到
#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"
| 归档时间: |
|
| 查看次数: |
488 次 |
| 最近记录: |