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

可由函数实现的功能不应使用宏实现

3.2.10 ID_macro_function
目录 › next › previous

宏用于文本处理,不受作用域、参数传递、重载等语言规则限制,且难以调试,可由函数实现的功能不应使用宏实现。

示例:

#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 函数中的宏展开会造成错误。

相关

ID_macro_sideEffectArgs ID_macro_const ID_macro_typeid

参考

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
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.