C语言#define STRINGIFY(s) #s宏是否会将整数转换为字符串字面量
C语言字符串化宏
STRINGIFY(s)的行为说明 - 这个宏的核心是C预处理器的
#字符串化运算符,作用是把传入宏的参数原封不动转换为字符串字面量。 - 当传入
96这类整数值时,预处理器不会对数值做任何运算、类型转换操作,只会把你写在参数位置的原始字符序列转成字符串,最终确实会得到"96"形式的字符串字面量。 - 举个实际展开的例子:你在代码里写
STRINGIFY(96),经过预处理阶段之后,这段代码会被直接替换为"96",和你手动写的字符串常量完全等价。
要注意这个操作是预处理阶段完成的,和运行时整数转字符串的逻辑没有关系:预处理器不会识别参数的类型,不管你传的是整数、变量名、关键字还是其他合法的C token,它都只会把你写在参数位置的原始字符序列原样套上双引号生成字符串。
如果你传入的参数本身是另一个宏,比如定义了#define VAL 96,直接写STRINGIFY(VAL)得到的会是"VAL"而不是"96",需要再加一层中转宏才能拿到宏展开后的值对应的字符串。
内容的提问来源于stack exchange,提问作者Cheetaiean
相关产品推荐
相关产品推荐

