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

不应定义具有保留意义的名称

6.1.2 ID_reservedName
目录 › next › previous

自定义的名称不应与标准库或编译环境中的名称相同,否则会导致标准未定义的行为,也不利于阅读和维护。

下列名称具有保留意义,自定义名称不应与之相同:

  • 标准库或编译环境中的宏名称
  • 标准库中具有外部链接性的对象或函数名称
  • 标准库中的类型名称

自定义字面常量后缀应以下划线开头,否则为保留名称,除此之外:

  • 以两个下划线开头的名称
  • 以一个下划线和一个大写字母开头的名称
  • 以下划线开头的全局名称

均具有保留意义,自定义名称应避免这种命名方式。

对于宏,本规则特化为 ID_macro_defineReserved、ID_macro_undefReserved。

示例:

#include <errno.h>

struct A {
    void foo() {
        if (errno != 0) {  // Which errno?
            ....
        }
    }
private:
    int errno;  // Non-compliant
};

例中成员变量 errno 与标准库中的 errno 名称相同,不便于区分是自定义的还是系统定义的。

又如:

size_t _Size();   // Non-compliant

size_t operator "" KB(unsigned long long n) {   // Non-compliant
    return n * 1024;
}

例中函数名 _Size 以一个下划线和一个大写字母开头,自定义字面常量后缀 KB 未以下划线开头,均不符合要求。

相关

ID_macro_defineReserved ID_macro_undefReserved ID_inconsistentNaming

依据

ISO/IEC 9899:1999 7.1.3(1) ISO/IEC 9899:2011 7.1.3(1) ISO/IEC 14882:2003 17.4.3.1 ISO/IEC 14882:2011 17.6.4.3 ISO/IEC 14882:2017 20.5.4.3

参考

MISRA C 2012 21.2 MISRA C++ 2008 17-0-1 MISRA C++ 2008 17-0-2 MISRA C++ 2008 17-0-3 SEI CERT DCL37-C SEI CERT DCL51-CPP
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.