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

宏不应被重定义

3.2.11 ID_macro_redefined
目录 › next › previous

宏不受作用域限制,重定义宏会使同一个全局名称产生多种不同的意义,易导致错误并降低可维护性。

示例:

#define M 1

int foo() {
    #define M 0   // Non-compliant, redefined
    return M;
}

int bar() {
    return M;   // Probably wrong
}

例中宏 M 在 foo 函数中被重定义,其影响范围是难以控制的,即使在重定义前用 #undef 取消定义也是不可取的,复用宏名称会使代码难以维护。

依据

ISO/IEC 9899:1999 6.10.3(2) ISO/IEC 9899:2011 6.10.3(2) ISO/IEC 14882:2003 16.3(2 3) ISO/IEC 14882:2011 16.3(2)
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.