在典型的xstr宏中“ x”是什么意思?

詹姆斯德林

定义字符串化宏的常见做法是:

#define str(token) #token
#define xstr(token) str(token)

为什么x通常使用前缀?“ x”有什么含义吗?

(我的猜测可能是它代表“扩展”(如果有的话),但我没有证据支持这一点。)

特雷弗·特雷西

正如其他人所建议的那样,x似乎将其用于扩展,或者我也看到了扩展的使用。关于GNU字符串化的文章中有对此用法的引用。

他们将其表述为:

“如果要对结果进行字符串化,则必须使用两个级别的宏。

#define xstr(s) str(s)
#define str(s) #s
#define foo 4
str (foo)
     → "foo"
xstr (foo)
     → xstr (4)
     → str (4)
     → "4"

他们继续声明:

“当在str中使用s时,它是字符串化的,因此它不是首先进行宏扩展。但是s是xstr的普通参数,因此在xstr自身扩展之前,它已完全进行了宏扩展(请参阅参数预扫描)。当时间到达争论的时候,它已经被宏扩展了。”

尽管这都不是具体的,但我认为您可以放心地假设x是扩展/扩展用法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章