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

遵循合理的命名方式

6.1.1 ID_badName
目录 › next › previous

应遵循易于读写,并可准确表达代码意图的命名方式。

不应出现下列情况:

  • 超长的名称
  • 易造成混淆或冲突的名称
  • 无意义或意义过于空泛的名称
  • 不易于读写的名称
  • 有违公序良俗的名称

示例:

int xxx(int);   // Bad, meaningless name

int fun(int);   // Bad, vague name

int l, I, O, l0, Il;   // Bad, like numbers

int YE5, N0;   // Bad, like a word but not

int \u540d\u79f0;   // Bad, no readability

int nVarietyisthespiceoflife = 123;   // Bad, hard to read or write

例中 xxx、fun 这种无意义或意义过于空泛的名称,以及 l、lI、N0 这种易与数字或其他单词混淆的名称均是不符合要求的;Unicode 转义名称只应出现在字符串中,否则没有可读性;名称中各单词间应有下划线或大小写变化,否则不便于读写。

本规则集合示例中出现的 foo、bar 等名称,意在代指一般的代码元素,仅作示例,实际代码中不应出现。

注意,不良命名方式甚至会导致标准未定义的行为,如:

extern int identifier_of_a_very_very_long_name_1;
extern int identifier_of_a_very_very_long_name_2;   // Dangerous

如果两个名称有相同的前缀,当相同前缀超过一定长度时是危险的,可能会导致编译器无法有效区分相关名称。C 标准指明,保证名称前 31 位不同可避免这种问题。

不建议采用相同“长前缀”+ 不同“短后缀”的命名方式,这种名称非常容易造成笔误或复制粘贴错误,如:

struct Expr {
    Expr* sub0;   // Bad
    Expr* sub1;   // Bad
};

设 Expr 是某二元表达式类,sub0、sub1 为左右子表达式,这种命名方式应改进:

struct Expr {
    Expr* left;   // Better
    Expr* right;  // Better
};

配置

maxObjNameLength: 对象名称长度上限,超过则报出 maxFunNameLength: 函数名称长度上限,超过则报出 maxTypeNameLength: 类型名称长度上限,超过则报出 maxWordLength: 连续无大小写变化的字符数量上限,超过则报出

依据

ISO/IEC 9899:1999 5.2.4.1(1) ISO/IEC 9899:1999 6.4.2.1(6)-undefined ISO/IEC 9899:2011 5.2.4.1(1) ISO/IEC 9899:2011 6.4.2.1(6)-undefined

参考

C++ Core Guidelines NL.19 C++ Core Guidelines ES.8 MISRA C 2004 5.1 MISRA C 2012 5.1 MISRA C 2012 5.2 MISRA C 2012 5.4 MISRA C 2012 5.5 MISRA C++ 2008 2-10-1
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.