理解字符串化:宏扩展的关键步骤
类 C 语言中的字符串化概念允许您将表达式转换为字符串。了解此过程中涉及的步骤对于有效地使用宏至关重要。
问题:输出差异
考虑以下宏定义:
#define foo 4 #define str(s) #s
当您在代码中使用 str(foo) 时,它将输出“foo”,因为字符串化(步骤 1)是在文本扩展(步骤2).
但是,如果你定义一个额外的宏:
#define xstr(s) str(s)
并使用xstr(foo),输出将令人惊讶地是“4”。这种差异需要探索字符串化过程。
宏扩展的步骤
根据 C 和 C 标准,宏扩展的过程涉及几个步骤:
将步骤应用于 xstr(foo)
为什么 str(foo) 输出 "foo"
与 xstr(foo) 相比,str(foo) 输出 "foo"因为:
因此,使用 xstr 这样的辅助宏可确保在字符串化(步骤 1)之前执行文本扩展(步骤 2),从而实现正确的字符串转换。
以上是为什么类 C 宏扩展中 `xstr(foo)` 输出'4”,而 `str(foo)` 输出'foo”?的详细内容。更多信息请关注PHP中文网其他相关文章!