揭开字符串化的魔力
在编程领域,字符串化是一种通用技术,允许宏基于以下内容动态生成字符串他们的论点。理解这个过程如何展开的关键是宏展开发生的细致顺序。
考虑以下宏定义:
#define foo 4 #define str(s) #s
当 str(foo) 被计算时,它会产生将 #s 扩展为“foo”,因为字符串化操作 (#) 优先于文本扩展。但是,当您引入额外的宏间接层时,操作顺序就变得至关重要。
xstr(foo) 的情况
定义宏 xstr(s) as:
#define xstr(s) str(s) #define str(s) #s #define foo 4
将此宏应用于 xstr(foo) 会产生意外结果:“4”。解开这个谜团的关键在于宏扩展的以下步骤:
处理 xstr(foo) 时:
由于 #4 是字符串文字,因此它解析为“4”。因此,xstr(foo) 的计算结果为“4”而不是“foo”,因为字符串化操作在文本扩展后生效。
宏顺序课程
这个看似违反直觉的结果凸显了宏观秩序的重要性。为了避免这种歧义,通常建议在应用字符串化操作之前使用辅助宏来执行一个步骤。这通过明确定义操作顺序来确保期望的结果。
以上是宏展开顺序如何影响 C 预处理中的字符串化?的详细内容。更多信息请关注PHP中文网其他相关文章!