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

只应在全局作用域中定义宏

3.2.12 ID_macro_inBlock
目录 › next › previous

宏不受作用域限制,在非全局作用域中定义宏易引起误解。

示例:

void foo(void) {
    #define M 123   // Non-compliant, defined in a function scope
    ....
}

例中宏 M 在函数中定义,但其作用范围却是全局的。

如果宏与某作用域密切相关,在该作用域内定义宏,使用后再取消定义是一种惯用方式,如:

void foo(void) {
    #define M 123   // Let it go?
    ....
    #undef M
}

审计工具不妨通过配置决定是否放过这种情况。

配置

allowDefineAndUndefInSameBlock: 是否允许在同一非全局作用域内定义并取消定义宏

相关

ID_macro_undef

依据

ISO/IEC 9899:1999 6.10.3.5(1) ISO/IEC 9899:2011 6.10.3.5(1)

参考

MISRA C 2004 19.5 MISRA C++ 2008 16-0-2
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.