为什么Stringification无法按预期工作

时间:2014-04-02 22:58:58

标签: c

我的C代码包含如下的strinigication。

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

现在xstr(foo)正确评估为“4”。

但是str(foo)被评估为“foo”。但我认为它应该被评估为“4”。任何人都可以解释我如何评价为“foo”。

1 个答案:

答案 0 :(得分:3)

由于C中的宏扩展规则。使用您定义的str(s)foo会立即放置为#foo,而不是评估foo的值。当您使用xstr打包它时,它可以在应用字符串化之前实际评估foo

这个过程看起来像这样

str(foo)->#foo->"foo"
xstr(foo)->str(4)->#4->"4"