定义字符串化宏的常见做法是:
#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] 删除。
我来说两句