以分号终止的宏
宏定义以分号结束。
描述
此缺陷发生在调用至少一次的宏定义以分号结尾时。
风险
如果宏定义以分号结尾,宏展开可能在某些上下文中导致意外的程序逻辑,例如在表达式中。
例如,考虑以下宏:
#define INC_BY_ONE(x) ++x;
res = INC_BY_ONE(x)%2;
res = ++x; %2;
x+1
的值被赋给 res
,这可能不是您想要的结果。剩余的独立语句 %2;
是有效的 C 代码,仅在启用严格编译器警告时才能被检测到。修复
不要在宏定义的末尾使用分号。请让宏的用户在需要时在宏之后添加分号。
或者,优先使用内联函数,而不是涉及以分号结尾的语句的函数式宏。
示例
结果信息
组:良好做法 |
语言:C | C++ |
默认值:关闭 |
命令行语法:SEMICOLON_TERMINATED_MACRO |
影响:低 |
版本历史记录
在 R2020a 中推出
另请参阅
查找缺陷 (-checkers)
| 缩进不正确的语句
| 分号与 if、for 或 while 语句在同一行
| 包含多个语句的宏
主题
- 解释 Polyspace 桌面端用户界面中的 Bug Finder 结果
- 解释 Polyspace Access Web 界面中的 Bug Finder 结果 (Polyspace Access)
- 通过 Bug 修复或申述在 Polyspace 用户界面中处理结果
- 通过 Bug 修复或申述在 Polyspace Access 中处理结果 (Polyspace Access)