2 命名规则
比较著名的命名规则当推“匈牙利” 命名法,该命名规则的主要思想是“在变量和函数名中加入前缀以增进人们对程序的理解”。例如所有的字符变量均以ch为前缀,若是指针变量则追加前缀p。如果一个变量由ppch开头,则表明它是指向字符指针的指针。
“匈牙利”法最大的缺点是烦琐,例如
int i, j, k;
float x, y, z;
倘若采用“匈牙利”命名规则,则应当写成
int iI, iJ, ik; // 前缀 i表示int类型
float fX, fY, fZ; // 前缀 f表示float类型
如此烦琐的程序会让绝大多数程序员无法忍受。
总的说来,没有一种命名规则可以让所有的程序员赞同,且命名规则对软件产品而言并不是“成败悠关”的事,而且在不同的平台和不同的环境下编写的程序所应遵循的规则也不尽相同,所以我们只是追求制定一种令大多数项目成员满意的命名规则,并在项目中贯彻实施。
2.1 共性原则
本节论述的共性规则是被大多数程序员采纳的,我们应当在遵循这些共性规则的前提下,再扩充特定的规则,如2.2节
☆ 【规则2.1-1】 标识符应当直观且可以拼读,可望文知意,不必进行“解码”;
☆ 【规则2.1-2】 标识符的长度应当符合“min-length && max-information”原则;
☆ 【规则2.1-3】 命名规则尽量与所采用的操作系统或开发工具的风格保持一致;
☆ 【规则2.1-4】 程序中不要出现仅靠大小写区分的相似的标识符。
☆ 【规则2.1-5】 程序中不要出现标识符完全相同的局部变量和全局变量,尽管两者的作用域不同而不会发生语法错误,但会使人误解;
☆ 【规则2.1-6】 变量的名字应当使用“名词”或者“形容词+名词”;
☆ 【规则2.1-7】 全局函数的名字应当使用“动词”或者“动词+名词”(动宾词组);
☆ 【规则2.1-8】 用正确的反义词组命名具有互斥意义的变量或相反动作的函数等;
☆ 【建议2.1-1】 尽量避免名字中出现数字编号,如Value1,Value2等,除非逻辑上的确需要编号;
注:
2.1.1 标识符最好采用英文单词或其组合,便于记忆和阅读,切忌使用汉语拼音来命名,程序中的英文单词一般不要太复杂,用词应当准确,例如不要把CurrentValue写成NowValue;
2.1.2 标示符的长度应当以最小的长度实现最多信息,一般来说,长名字能更好地表达含义,但并非长的变量名就一定要比短的变量名要好,此外单字符的名字也是有用的,常见的如i,j,k,m,n,x,y,z等,它们通常可用作函数内的局部变量;
2.1.3 不同的操作系统的程序设计风格是不一样的,例如Windows应用程序的标识符通常采用“大小写”混排的方式,如AddChild,而Unix应用程序的标识符通常采用“小写加下划线”的方式,如add_child,别把这两类风格混在一起使用;
2.2 Windows变量命名规则
☆ 【规则2.2-1】 变量的命名规则要求采用“匈牙利法则”,即开头字母用变量的类型,其余部分用变量的英文意思或其英文意思的缩写,尽量避免采用中文拼音,要求单词的第一个字母大写;
即:变量名=变量类型+变量英文意思(或缩写)
变量类型请参见附表1-变量类型表;
☆ 【规则2.2-2】 类名和函数名用大写字母开头的单词组合而成;对struct、union、class变量的命名要求定义的类型用大写,结构采用S开头,联合体采用U开头,类采用C开头;
例如:
struct SPoint
{
int m_nX;
int m_nY;
};
union URecordLen
{
BYTE m_byRecordNum;
BYTE m_byRecordLen;
}
class CNode
{
//类成员变量或成员函数
};
☆ 【规则2.2-3】 指针变量命名的基本原则为:
一重指针变量的基本原则为:
变量名= “p”+变量类型前缀+命名
对多重指针变量的基本原则为:
二重指针:
变量名=“pp”+变量类型前缀+命名
三重指针:
变量名=“ppp”+变量类型前缀+命名
......
例如一个short*型的变量应该表示为pnStart;
">☆ 【规则2.2-4】 全局变量用g_开头;例如一个全局的长型变量定义为g_lFileNum,
即:变量名=g_+变量类型+变量的英文意思(或缩写);
☆ 【规则2.2-5】 静态变量采用s_开头;例如一个静态的指针变量定义为s_plPrevInst,
即:变量名=s_+变量类型+变量的英文意思(或缩写);
☆ 【规则2.2-6】 类成员变量采用m_开头;例如一个长型成员变量定义为m_lCount,
即:变量名=m_+变量类型+变量的英文意思(或缩写);
☆ 【规则2.2-7】 对const的变量要求在变量的命名规则前加入c_(若作为函数的输入参数,可以不加),
即:变量名=c_+变量命名规则,例如:
const char* c_szFileName;
☆ 【规则2.2-8】 对枚举类型(enum)中的变量,要求用枚举变量或其缩写做前缀,且用下划线隔离变量名,所有枚举类型都要用大写,例如:
enum EMDAYS
{
EMDAYS_MONDAY;
EMDAYS_TUESDAY;
......
};
☆ 【规则2.2-9】 对常量(包括错误的编码)命名,要求常量名用大写,常量名用英文意思表示其意思,用下划线分割单词,例如:
#define CM_7816_OK 0x9000;
☆ 【规则2.2-10】 为了防止某一软件库中的一些标识符和其它软件库中的冲突,可以为各种标识符加上能反映软件性质的前缀。例如三维图形标准OpenGL的所有库函数均以gl开头,所有常量(或宏定义)均以GL开头。
3 程序风格
程序风格虽然不会影响程序的功能,
但会影响程序的可读性,追求清晰、美观,是程序风格的重要构成因素。
3.1 空行
空行起着分隔程序段落的作用。空行得体(不过多也不过少)将使程序的布局更加清晰。空行不会浪费内存,虽然打印含有空行的程序是会多消耗一些纸张,但是值得。
☆ 【规则3.1-1】 在每个类声明之后、每个函数定义结束之后都要加空行。参见示例3.1(a);
☆ 【规则3.1-2】 在一个函数体内,逻揖上密切相关的语句之间不加空行,其它地方应加空行分隔
3.2 代码行
☆ 【规则3.2-1】 一行代码只做一件事情,如只定义一个变量,或只写一条语句,这样的代码容易阅读,并且方便于写注释;
☆ 【规则3.2-2】 if、for、while、do等语句自占一行,执行语句不得紧跟其后,不论执行语句有多少都要加{},这样可以防止书写失误;
☆ 【规则3.2-3】 if、for、while、do等语句的“{”要单独占用一行;
☆ 【建议3.2-1】 所有函数内的变量都在函数开始处定义;
☆ 【建议3.2-2】 尽可能在定义变量的同时初始化该变量(就近原则),如果变量的引用处和其定义处相隔比较远,变量的初始化很容易被忘记。如果引用了未被初始化的变量,可能会导致程序错误,本建议可以减少隐患。

306

被折叠的 条评论
为什么被折叠?



