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

不应使用宏定义常量

3.2.8 ID_macro_const
目录 › next › previous

宏用于文本处理,不受作用域等语言规则限制,不应使用宏实现常量等语言层面的概念。

示例:

namespace U {
    #define PI 3.14F  // Non-compliant
}

namespace V {
    #define PI 3.14159L  // Non-compliant
}

namespace W {
    void fun(double PI);  // Disturbed
}

例中宏 PI 不受命名空间的限制,第二个宏定义会覆盖第一个宏定义,而且会干扰其他作用域中相同的名称。

应改为:

namespace U {
    const float PI = 3.14F;  // Compliant
}

namespace V {
    const long double PI = 3.14159L;  // Compliant
}

为了避免混乱,建议宏只作为 #if、#elif 等指令的条件,不参与具体的功能实现。

相关

ID_macro_typeid ID_macro_function

参考

C++ Core Guidelines ES.31 C++ Core Guidelines Enum.1
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.