【问题标题】:why Stringification not working as expected为什么字符串化没有按预期工作
【发布时间】:2023-04-01 00:03:02
【问题描述】:

我的 C 代码包含如下字符串。

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

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

但是 str(foo) 被评估为“foo”。但我认为它应该被评估为“4”。谁能解释一下它是如何被评估为“foo”的。

【问题讨论】:

标签: c


【解决方案1】:

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

这个过程看起来像这样

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

【讨论】:

  • 我得到了一个正确的解释(无耻地从堆栈溢出问题之一复制):问题是当你有一个宏替换时,如果字符串化运算符都没有,预处理器只会递归地扩展宏#也没有应用标记粘贴运算符##。
  • 是的。我理解你的例子。我不应该在评论中说“正确”。
猜你喜欢
  • 1970-01-01
  • 2014-08-04
  • 2021-01-03
  • 2018-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多