不可取消定义具有保留意义的宏名称
3.2.3 ID_macro_undefReserved
取消定义已有特殊用途的宏会导致标准未定义的行为,也会使代码陷入难以维护的境地。
标准库、编译环境中的宏不可被取消定义。
示例:
#undef __LINE__ // Non-compliant
#undef __cplusplus // Non-compliant
#undef _WIN64 // Non-compliant
#undef NDEBUG // Non-compliant
配置
keywordAsReserved: 是否将关键字作为保留名称
stdNameAsReserved: 是否将标准库中的名称作为保留名称
underscoreAsReserved: 是否将下划线开头的名称作为保留名称
reservedNames: 用户指定的保留名称
相关
依据
ISO/IEC 9899:1999 7.1.3(3)-undefined
ISO/IEC 9899:2011 7.1.3(3)-undefined
ISO/IEC 14882:2003 16.8(3)-undefined
ISO/IEC 14882:2011 16.8(4)-undefined
参考
MISRA C 2012 21.1
MISRA C++ 2008 17-0-1