根据C标准,负整数字面量视为单个字面量还是运算符加字面量?
C语言中负整数的语法解析:是字面量还是一元运算符+数值?
从C标准的定义来看,不存在负整数字面量。像-16这样的写法,语法上会被解析为一元负号运算符-和正整数字面量16的组合,也就是等价于-(16)。
编译器在实际编译优化阶段,可能会直接将-16转换为对应负数值的机器码,避免运行时的运算操作,但这属于实现层面的优化,不改变语法解析的本质。
类似的,+16也是一元正号运算符+和字面量16的组合,只是正号通常可以省略,而负号必须显式写出。哪怕是在枚举常量、宏定义等场景中,-16的语法结构依然是运算符加字面量,而非单个负数值字面量。
内容的提问来源于stack exchange,提问作者Marcus
相关产品推荐
相关产品推荐

