可由函数实现的功能不应使用宏实现
3.2.10 ID_macro_function
宏用于文本处理,不受作用域、参数传递、重载等语言规则限制,且难以调试,可由函数实现的功能不应使用宏实现。
示例:
#define SUM(a, b) ((a) + (b)) // Non-compliant
#define SUM(a, b, c) ((a) + (b) + (c)) // Non-compliant
int foo(int a, int b) {
return SUM(a, b); // Error
}
例中宏 SUM 意在获取参数的和,但宏无法被重载,最终只有一个宏被定义,foo 函数中的宏展开会造成错误。
相关
参考
C++ Core Guidelines ES.31
MISRA C 2004 19.7
MISRA C 2012 Dir 4.9
MISRA C++ 2008 16-0-4
SEI CERT PRE00-C