C语言#define定义整数时包裹括号的作用是什么?
代码含义
这两行是C语言的对象式宏定义,预编译阶段会把代码中所有出现NN_DIGITS的位置替换为(4),所有出现MM_MARKS_DONE的位置替换为(255)。
相关问题解答
- 定义整数常量时加括号是否属于冗余操作?
对单个整数常量字面量的场景来说,仅从替换结果看括号没有改变值本身,但这是C宏定义的通用最佳实践,不属于无效冗余。宏是纯文本替换规则,如果你后续修改宏值为复合表达式(比如把4改成2+2),不加括号就会出现运算符优先级导致的非预期错误:比如#define NN_DIGITS 2+2时,代码中NN_DIGITS * 2会被替换为2+2*2,最终运算结果是6而非预期的8。统一给宏值加括号是避免这类问题的通用规范,哪怕当前是单个常量也可以保持这个习惯。 - 这些值会被按位解释吗?
不会。括号不会改变整数常量的类型和解析逻辑,(4)和直接写4完全等价,都是int类型的整数常量,不会触发按位解释或者其他特殊处理逻辑。 - 如果不写括号会发生什么问题,4和255会被当作字符串处理吗?
不会被当作字符串处理。如果宏值始终是单个整数常量,加不加括号运行结果完全一致,没有任何功能问题。只有当你后续把宏值修改为复合表达式却忘了加括号时,才会出现前面提到的运算符优先级问题。
内容的提问来源于stack exchange,提问作者SNR
相关产品推荐
相关产品推荐

