首页 > 后端开发 > C++ > 为什么字符串化在一种情况下产生'foo”,在另一种情况下产生'4”?

为什么字符串化在一种情况下产生'foo”,在另一种情况下产生'4”?

Linda Hamilton
发布: 2024-12-24 04:20:10
原创
904 人浏览过

Why Does Stringification Produce

字符串化揭秘:分步说明

字符串化是一种强大的宏技术,可将给定标记转换为字符串文字。为了理解它的复杂性,让我们检查以下场景:

define foo 4

define str(s) #s

使用 str(foo),预期输出是 " foo”,因为字符串化被认为发生在文本扩展之前。但是,在第二个示例中:

define xstr(s) str(s)

define str(s) #s

define foo 4

xstr(foo) 的输出变为“4”。为了解决这个差异,我们深入研究宏扩展中涉及的具体步骤:

  1. 预处理指令:首先处理以 # 或 ## 开头的宏。
  2. 参数替换:宏内的参数被替换为相应的参数值。
  3. 参数替换: 参数将替换为其各自的参数值。
  4. 重新扫描宏: 重新扫描生成的文本以查找其他宏.

将这些步骤应用于xstr(foo):

  1. 没有任何反应,因为 str(s) 不包含 # 或 ##。
  2. foo 被替换为 4,得到 xstr(4)。
  3. 在str(s)中,s被4替换,生成str(4)。
  4. str(4)是重新扫描,产生最终输出“4”。

现在,让我们检查 str(foo):

  1. 参数 foo 仍然是 foo (未替换为 4) .
  2. 替换文本 #s 产生"foo."

问题的关键在于执行顺序。在步骤 1 中,当计算 str(foo) 时,foo 尚未被 4 替换。因此,字符串化步骤结果为“foo”。

因此,使用像 xstr 这样的辅助宏可以单独执行步骤 2 和 1,最终提供所需的字符串化行为。

以上是为什么字符串化在一种情况下产生'foo”,在另一种情况下产生'4”?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板