高质量C++C编程指南
第三章命名规则
比较的命名规则要参照微软的“匈牙利”法。这个命名规则的主要思想是“给变量和函数名加上前缀,以提高人们对程序的理解”。比如所有的字符变量都以ch为前缀,如果指针变量以p为前缀,如果一个变量以ppch开头,就说明它是一个指向字符指针的指针。
匈牙利法的缺点是繁琐,如
int i,j,k;
float x,y,z;
如果采用“匈牙利”的命名规则,应该写成
int iI,iJ,ik;//前缀I表示int类型
float fX,fY,fZ;//前缀f表示float类型
这样繁琐的程序对于大多数程序员来说会难以忍受。
据调查,没有一个命名规则是所有程序员都能认同的。编程教材一般不会规定命名规则。命名规则不是软件产品“成败”的问题。与其试图在世界范围内发明命名规则,不如制定一个让大多数项目成员满意的命名规则,并在项目中实施。
3.1通用规则
本节讨论的通用规则被大多数程序员采用。我们应该遵循这些通用规则,并扩展特定规则,例如3.2节。
l【规则3-1-1】标识符应该是直观的,可以拼写的,并且期望是字面的,不需要“解码”。
标识采用英文单词或其组合,便于记忆和阅读。千万不要用汉语拼音来命名。节目中的英文单词一般不会太复杂,用词要准确。例如,不要将CurrentValue写成NowValue。
l[规则3-1-2]标识符的长度应符合“最小长度和最大信息”的原则。
几十年前,旧的ANSI C规定名字不能超过6个字符,但是现在的C++/C已经没有这个限制了。一般来说,长名字更能表达意思,所以函数名、变量名、类名十几个字符也就不足为奇了。那么名字是不是越长越好呢?不一定!比如变量名maxval比maxValueUntilOverflow好。单个字符的名字也有用,比如I,j,k,m,n,x,y,z等。,常用作函数中的局部变量。
l【规则3-1-3】命名规则要尽可能与所使用的操作系统或开发工具的风格保持一致。
比如Windows应用的标识符通常是大小写混合的,比如AddChild。Unix应用程序标识符通常用小写下划线,例如add_child。不要把这两种风格混在一起。
L [Rule 3-1-4]在程序中没有类似的标识符,只是通过大小写来区分。
例如:
int x,X;//变量x和x容易混淆
void foo(int x);//函数FOO容易和foo
void FOO(float x)混淆;
l[规则3-1-5]不要在程序中出现标识符相同的局部变量和全局变量。虽然两个变量的范围不同,不会出现语法错误,但会产生误导。
l【规则3-1-6】变量的名称应该是“名词”或“形容词+名词”。
例如:
浮点值;
float old value;
float new value;
l【规则3-1-7】全局函数的名称应该是“动词”或“动词+名词”(动宾短语)。类成员函数应该只使用“动词”,省略的名词就是对象本身。
例如:
DrawBox();//全局函数
box-> Draw();//类的成员函数
l【规则3-1-8】用正确的反义词命名具有互斥意义的变量或作用相反的函数。
例如:
int minValue;
int max value;
int SetValue(…);
int GetValue(…);
2【建议3-1-1】尽量避免在名称中使用数字编号,如Value1、Value2等。,除非在逻辑上有必要这样做。这是为了防止程序员偷懒,不愿意考虑命名,导致名字没有意义(因为用数字编号最方便)。
3.2 Windows应用程序的简单命名规则
作者对“匈牙利”的命名规则进行了合理的简化。以下命名规则简单易用,比较适合Windows应用程序的开发。
l[规则3-2-1]类名和函数名是由以大写字母开头的单词组合而成的。
例如:
类节点;//类名
class leaf node;//类名
void Draw(void);//函数名
void SetValue(int value);//函数名
l【规则3-2-2】变量和参数是以小写字母开头的单词组合而成的。
例如:
BOOL flag;
int draw mode;
l【规则3-2-3】常量都是大写字母,单词之间用下划线隔开。
例如:
const int MAX = 100;
const int MAX _ LENGTH = 100;
l【规则3-2-4】静态变量以s_ (static)为前缀。
例如:
void init(…)
{
static int s _ init value;//静态变量
…
}
L [Rule 3-2-5]如果全局变量是必需的,那么在全局变量前面加上g_ (global)。
比如:
int g _ how many people;//全局变量
int g _ howMuchMoney;//全局变量
l【规则3-2-6】类的数据成员以m_(代表成员)为前缀,可以避免数据成员与成员函数的参数同名。
例如:
void object::setvalue(int width,int height)
0条评论