MISRA C++:2023 Rule 19.0.2
R2026b描述
Function-like macros shall not be defined. 1
理由
与使用类似函数的宏相比,使用函数具有某些优势。例如:
可以将函数地址传递给另一个函数。
可以重载函数并创建模板。
可对函数参量和返回值执行类型检查。
有关使用函数而非宏的完整优势列表,请参阅 MISRA-C++:2023 标准。
Polyspace 实现
只要定义了类似函数的宏,Polyspace® 就会报告违规。以下是在宏定义中使用时,该规则的例外情况,因为无法在函数中实现它们的等效行为:
__LINE____FILE____func__#或##运算符
当类似函数的宏定义为 (void)(X) 时,Polyspace 不会报告违规。这些类型的宏通常用于作为输入与函数一起使用。例如,可以使用此类宏将函数的返回值显式强制转换为 void。这种宏的用法无法由函数复制。
故障排除
如果您预期会出现违规,而 Polyspace 未报告该违规,请参阅诊断为何编码规范违规未按预期显示。
示例
检查信息
| 组:预处理指令 |
| 类别:必需 |
PQL 名称:std.misra_cpp_2023.R19_0_2 |
版本历史记录
在 R2024b 中推出
1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.
The MISRA coding standards referenced in the Polyspace Bug Finder™ documentation are from the following MISRA standards:
MISRA C:2004
MISRA C:2012
MISRA C:2023
MISRA C:2025
MISRA C++:2008
MISRA C++:2023
MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.