避免宏被取消定义
3.2.13 ID_macro_undef
宏不受作用域限制,不应被取消定义,否则会失去确定性,使代码难以维护。
示例:
// In a.h
#define M 1
// In b.h
#undef M // Non-compliant
#define M 0 // Redefined, bad
在一个文件中定义了宏 M,在另一个文件取消并重定义了 M,使同一个全局名称产生两种不同的意义,严重降低了可维护性。
有时取消定义已使用完毕的内部宏可避免对外部产生不良影响,具有一定积极作用,但宏的定义和取消应在同一文件的同一作用域中完成,相关示例可参见 ID_macro_inBlock。
配置
allowUndefMacroInSameBlock: 是否允许取消在同一作用域内定义的宏
相关
参考
MISRA C 2004 19.6
MISRA C 2012 20.5
MISRA C++ 2008 16-0-3