我的C代码包含如下的strinigication。
#define xstr(s) str(s)
#define str(s) #s
#define foo 4
现在xstr(foo)正确评估为“4”。
但是str(foo)被评估为“foo”。但我认为它应该被评估为“4”。任何人都可以解释我如何评价为“foo”。
答案 0 :(得分:3)
由于C中的宏扩展规则。使用您定义的str(s)
,foo
会立即放置为#foo
,而不是评估foo
的值。当您使用xstr
打包它时,它可以在应用字符串化之前实际评估foo
。
这个过程看起来像这样
str(foo)->#foo->"foo"
xstr(foo)->str(4)->#4->"4"