gpt4 book ai didi

c++ - 字符串化 - 它是如何工作的?

转载 作者:IT老高 更新时间:2023-10-28 14:01:25 24 4
gpt4 key购买 nike

我知道:

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

with str(foo) 写出:"foo",因为 stringify 是先执行文本扩展,但是这样:

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

xstr(foo) 写出:"4".

为什么?流程中涉及哪些步骤?

最佳答案

宏扩展的相关步骤是(根据C 2011 [n1570] 6.10.3.1和C++ 1998 16.3.1):

  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) 的问题在于第 2 步,它将用 4 替换 foo,出现在第 1 步之后,它将参数更改为字符串。在第 1 步中,foo 仍然是 foo;它没有被4替换,所以结果是”foo”

这就是使用辅助宏的原因。它允许我们执行第 2 步,然后使用另一个宏执行第 1 步。

关于c++ - 字符串化 - 它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16989730/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com