☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

宏定义为表达式时应该用括号括起来

3.2.4 ID_macro_expNotEnclosed
目录 › next › previous

宏的展开只是文本替换,不考虑运算符优先级等问题,所以宏定义为表达式时应该用括号括起来,从而避免意料之外的错误。

示例:

#define ABS(x) (x) < 0? -(x): (x)  // Non-compliant

设 a 为变量,如果按如下方式使用宏:

a = ABS(a) + 1;

则相当于:

a = (a) < 0? -(a): (a) + 1;

这显然会造成意料之外的结果,所以宏定义应该用括号括起来:

#define ABS(x) ((x) < 0? -(x): (x))  // Compliant

依据

ISO/IEC 9899:1999 6.10.3.5(4) ISO/IEC 9899:2011 6.10.3.5(4)

参考

CWE-783 SEI CERT PRE02-C
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.