3命名规则
3.1命名的基本原则
标识符的命名要清晰、明了,有明确含义,同时使用完整的单词或大家基本可以理解的缩写,避免使人产生误解——尽量采用采用英文单词或全部中文全拼表示
3.2变量名的命名规则
(1)变量的命名规则要求用“匈牙利法则”。即开头字母用变量的类型,其余部分用变量的英文意思、英文的缩写、中文全拼或中文全拼的缩写,要求单词的第一个字母应大写。
即:变量名=变量类型+变量的英文意思(或英文缩写、中文全拼、中文全拼缩写)对非通用的变量,在定义时加入注释说明,变量定义尽量可能放在函数的开始处。见下表:
bool用b开头bFlg
int用i开头iCount
shortint用n开头nStepCount
longint用l开头lSum
char用c开头cCount
unsignedchar用by开头
float用f开头fAvg
double用d开头dDeta
unsignedint(WORD)用w开头wCount
unsignedlongint(DWORD)用dw开头dwBroad
字符串用s开头sFileName
用0结尾的字符串用sz开头szFileName
注意:对于变量命名,禁止取单个字符(如i、j、k...),建议除了要有具体含义外,还能表明其变量类型、数据类型等,但i、j、k作局部循环变量是允许的,也不需要加前缀标识变量类型。
(2)指针变量命名的基本原则为:
对一重指针变量的基本原则为:“p”+变量类型前缀+命名,如一个float*型应该表示为pfStat。对二重指针变量的基本规则为:“pp”+变量类型前缀+命名。对三重指针变量的基本规则为:“ppp”+变量类型前缀+命名。
(3)全局变量用g_开头,如一个全局的长型变量定义为g_lFailCount,即:变量名=g_+变量类型+变量的英文意思(或缩写)。此规则还可避免局部变量和全局变量同名而引起的问题。
(4)静态变量用s_开头,如一个静态的指针变量定义为s_plPerv_Inst,即:变量名=s_+变量类型+变量的英文意思(或缩写)
(5)对枚举类型(enum)中的变量,要求用枚举变量或其缩写做前缀。并且要求用大写。如:
enumcmEMDAYS
{
EMDAYS_MONDAY;
EMDAYS_TUESDAY;
……
};
(6)对struct、union变量的命名要求定义的类型用大写。并要加上前缀,其内部变量的命名规则与变量命名规则一致。结构一般用S开头,如:
structScmNPoint
{
intnX;//点的X位置
intnY;//点的Y位置
};
联合体一般用U开头,如:
unionUcmLPoint
{
LONGlX;
LONGlY;
}
(7)对常量(包括错误的编码)命名,要求常量名用大写,常量名用英文表达其意思。当需要由多个单词表示时,单词与单词之间必须采用连字符“_”连接。
如:#defineCM_FILE_NOT_FOUNDCMMAKEHR(0X20B)其中CM表示类别。
(8)对const的变量要求在变量的命名规则前加入c_,即:c_+变量命名规则;示例:
constchar*c_szFileName;
3.4函数的命名规范
(1)函数的命名应该尽量用英文(或英文缩写、中文全拼、中文全拼缩写)表达出函数完成的功能——函数名应准确描述函数的功能。遵循动宾结构的命名法则,函数名中动词在前,并在命名前加入函数的前缀,函数名的长度不得少于8个字母。函数名首字大写,若包含有两个单词的每个单词首字母大写。如果是OOP方法,可以只有动词(名词是对象本身)。示例:
LONGGetDeviceCount(……);
voidprint_record(unsignedintrec_ind);
intinput_record(void);
unsignedcharget_current_color(void);
(2)避免使用无意义或含义不清的动词为函数命名。如使用process、handle等为函数命名,因为这些动词并没有说明要具体做什么。
(3)必须使用函数原型声明。函数原型声明包括:引用外来函数及内部函数,外部引用必须在右侧注明函数来源:模块名及文件名;内部函数,只要注释其定义文件名——和调用者在同一文件中(简单程序)时不需要注释。
应确保每个函数声明中的参数的名称、类型和定义中的名称、类型一致。
3.5函数参数命名规范
(1)参数名称的命名参照变量命名规范。
(2)为了提高程序的运行效率,减少参数占用的堆栈,传递大结构的参数,一律采用指针或引用方式传递。
(3)为了便于其他程序员识别某个指针参数是入口参数还是出口参数,同时便于编译器检查错误,应该在入口参数前加入const标志。如:
……cmCopyString(constCHAR*c_szSource,CHAR*szDest)