【高质量C/C++】3.命名规则

【高质量C/C++】—— 3. 命名规则

一、命名规则

在命名规则中比较著名的是Microsoft公司的“匈牙利”法,该命名规则的思想是 “在变量和函数名中加入前缀,以增进人们对程序的理解?。如所有字符以ch为前缀,指针追加前缀p,如果一个变量由ppch开头,则表明他是指向字符指针的指针。

“匈牙利”法最大的缺点就是烦琐,如:

int i, j, k;
float x, y, z;

// 匈牙利法
int iI, iJ, iK;		// 以i为前缀
float fX, fY, fZ;	// 以f为前缀

这样烦琐的程序会让绝大多数程序员无法忍受。

根据考察,没有一个命名规则可以让所有的程序员赞同,程序设计教科书一般都不指定命名规则。命名规则对于软件产品而言并不是成败攸关的事,我们不必花太多精力试图发明世界上最好的命名规则,应制定一个让大多数程序员都满意的命名规则。

二、共性规则

共性规则是大多数程序员采纳的,我们应当先遵循共性规则前提下,在扩充特定的规则

规则

  1. 标识符的内容:
    1. 标识符直观并且可以拼读,可以望文知意。标识符最好采用英文单词或其组合,便于记忆和阅读。切记不要使用汉语拼音来命名。
    2. 变量的名字应使用名词,或者形容词+名词
    3. 全局函数的名字应使用动词或动词+名词,类的成员函数应当只使用动词,被省略的名词就是对象本身。
int age = 18;				// 年龄
int nianling = 18;			// 年龄,不良的风格

int newValue = 0;			// 变量名
int Add(int a, int b);		// 全局函数名
box->Draw()					// 类的成员函数
  1. 标识符的规则:
    1. 标识符长度应符合一个特定的范围。长标识符可以更好的表达大含义,但是过长的标识符也会影响阅读。单字符名字也是有的,如i、j、k、m、n、x、y、z等在特定场景下有特定含义的。
    2. 命名规则尽量与操作系统或开发工具的风格保持一致。如Windows应用程序的标识符通常采用大小写混排的方式,而Unix应用程序标识符通常采用小写加下划线的方式。
int maxVal = 10;				// 变量名
int maxValueUntilOverflow = 10;	// 过长的变量名

for (int i=0; i<n; i++)			// 单字符名字i
    ;

void AddChild(... ...);			// Windows标识符风格
void add_child(... ...)			// Unix标识符风格
  1. 多个标识符的命名规则:
    1. 程序中不要出现只靠大小写区分的相似的标识符
    2. 程序中不要出现标识符完全相同的局部变量和全局变量,尽管二者作用域不同而不会发生语法错误,但会使人误解
    3. 用正确的反义词组命名具有互斥意义的变量或相反动作的函数的。
    4. 尽量避免名字中出现数字编号,除非逻辑上需要编号,无意义的数字编号命名会严重影响阅读性
int x, X;				// 不良的风格,大小写不易区分

// 不良的风格,全局变量名和局部变量名冲突
int name;
void test(void)
{
    int name;
}

int max, min;			// 良好的风格

// 良好的风格
int SetValue(... ...);
int GetValue(... ...);

// 不良的风格
int value1;
int value2;
int value3;

三、简单的Windows应用程序命名规则

规则

  1. 类名和函数名用大写字母开头的单词组合而成
  2. 变量和参数用小写字母开头的单词组合而成。
  3. 常量全用大写字母,用下划线分割单词。
  4. 静态变量加前缀s_
  5. 如果不得已要用全局变量,则全局变量前加前缀g_
  6. 类的数据成员加前缀m_,这样可以避免与成员函数的参数同名,但是对于现在这个时代,一般情况下我们在成员变量前加上_就可以了,对于一些特定的公司,也可能会要求你加在后面
  7. 为了防止软件库的标识符和其他软件库冲突,可以为各种标识符加上能反映软件性质的前缀。如三维图形标准OpenGL所有的库函数均以gl开头,所有常量均以GL开头
int g_value;					// 全局变量

class Node						// 类名
{
public:
    void SetValue(int value);
private:
    int _value;					// 成员变量
    bool _flag;
}

void Node::SetValue(int value)	// 函数名
{
    static int s_value;			// 静态变量
    
    const int MAX_LENGTH = 100;	// 常量
    
    bool flag;					// 变量
    int drawMode;
}

猜你喜欢

转载自blog.csdn.net/weixin_52811588/article/details/127007488