jam*_*lin 8 c naming-conventions c-preprocessor
通常的做法是定义字符串化宏,如:
#define str(token) #token
#define xstr(token) str(token)
Run Code Online (Sandbox Code Playgroud)
为什么x通常使用前缀?"x"有什么意义吗?
(我的猜测是,它可能代表"扩展"(如果有的话),但我没有证据支持这一点.)
小智 4
正如其他人所建议的,x似乎用于扩展,或者我也看到了扩展的使用。GNU 的一篇关于 Stringizing 的文章引用了这种用法。
他们将其表述为:
\n\n\n\n\n“如果你想对结果进行字符串化[...],\n你必须使用两级宏。”
\n
#define xstr(s) str(s)\n#define str(s) #s\n#define foo 4\nstr (foo)\n \xe2\x86\x92 "foo"\nxstr (foo)\n \xe2\x86\x92 xstr (4)\n \xe2\x86\x92 str (4)\n \xe2\x86\x92 "4"\nRun Code Online (Sandbox Code Playgroud)\n\n他们继续声明:
\n\n\n\n\n"s 在 str 中使用时已被字符串化,因此不会先进行宏扩展\n。但 s 是 xstr 的普通参数,因此在 xstr 本身扩展之前已完全\n 进行宏扩展(请参阅参数预扫描) .\n 因此,当 str 到达其参数时,它已经\n 被宏展开了。”
\n
虽然这些都不是具体的,但我认为您可以安全地假设 x 是扩展/扩展的用法。
\n