我有如下包含字符串化的 C 代码。
#define xstr(s) str(s)
#define str(s) #s
#define foo 4
现在 xstr (foo) 正确地计算为“4”。
但是 str(foo) 被评估为“foo”。但我认为应该评价为“4”。谁能解释一下它是如何被评估为“foo”的。
最佳答案
由于 C 中的宏扩展规则。使用 str(s)
您定义的 foo
立即被放置为 #foo
而不是评估 foo
的值。当您用 xstr
包装它时,它有机会在应用字符串化之前实际评估 foo
。
过程是这样的
str(foo)->#foo->"foo"
xstr(foo)->str(4)->#4->"4"
关于c - 为什么 Stringification 不能按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22824715/