典型xstr宏中"x"的含义及前缀命名缘由技术问询
关于xstr宏中"x"前缀的含义
你猜的其实没错!这个"x"确实代表expanded(展开),这是C/C++宏定义里的一个通用约定。
先简单回顾下这两个宏的核心作用:
#define str(token) #token:这个宏直接对传入参数做字符串化,但不会先展开参数本身的宏定义。比如你定义了#define PI 3.14,调用str(PI)得到的是字符串"PI",而非"3.14"。#define xstr(token) str(token):这层宏的关键就是先把传入参数展开成它的实际值,再传给str宏做字符串化。还是上面的例子,xstr(PI)会先把PI展开为3.14,再让str把它转换成"3.14"。
为什么用"x"作为前缀?就是因为它核心完成的是**参数展开(expansion)**的动作,用"x"缩写"expanded"足够简洁,而且是行业默认的约定——没有强制标准要求必须用x,但大家都这么用,看到xstr就能立刻明白这是会先展开参数再字符串化的宏,无需额外解释。
内容的提问来源于stack exchange,提问作者jamesdlin
相关产品推荐
相关产品推荐

