c语言 - "x"典型的 xstr 宏是什么意思?


定义

字符串化宏是常见的做法,例如:

#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"

他们继续声明:

"s 在 str 中使用时是字符串化的,所以它不是宏扩展的 第一。但是 s 是 xstr 的普通参数,所以它完全是 在展开 xstr 本身之前进行宏扩展(请参阅参数预扫描(。 因此,当str进入它的论点时,它已经 宏观扩展。

虽然这些都不是具体的,但我认为你可以安全地假设 x 是扩展/扩展用途。

当我在

宏或函数调用名称前面使用 x 时,我用它来表示扩展使用,我认为我并不孤单。

例如,一个使用 str 来字符串化token,但应该使用 xstr 进行扩展使用,即扩展宏参数并将该结果字符串化。为了进行比较,当大多数时候只使用其中一个宏而另一个用于内部实现时,我会执行以下操作:

#define _str(token) #token
#define str(token) _str(token)

最新更新