三种编程规则:驼峰命名法、帕斯卡命名法、匈⽛利名
⽂章⽬录
⼀、三种流⾏的命名法则
⽬前,业界共有四种命名法则:驼峰命名法、匈⽛利命名法、帕斯卡命名法和下划线命名法 ,其中前三种是较为流⾏的命名法。
1、驼峰命令法(Camel):也称骆驼式命名法正如它的名称所表⽰的那样,是指混合使⽤⼤⼩写字母来构成变量和函数的名字.例如,下⾯是分别⽤骆驼式命名法和下划线法命名的同⼀个函数:第⼀个函数名使⽤了骆驼式命名法,函数名中的每⼀个逻辑断点都有⼀个⼤写字母来标记;
第⼆个函数名使⽤了下划线法,函数名中的每⼀个逻辑断点都有⼀个下划线来标记
骆驼式命名法近年来越来越流⾏了,在许多新的库和Microsoft Windows 这样的环境中,它使⽤得当相多另⼀⽅⾯,下划线法是c 出现后开始流⾏起来的,在许多旧的程序和UNIX 这样的环境中,它的使⽤⾮常普遍 .
驼峰式命名法分为:
1. ⼤驼峰式命名规则:FirstName, CamelCase
2. ⼩驼峰式命名规则:firstName, camelCase
[中间不需要空格 - _等分割符]
2、匈⽛利命名法(Hungarian):
⼴泛应⽤于象Microsoft Windows这样的环境中Windows 编程中⽤到的变量(还包括宏)的命名规则匈⽛利命名法,这种命名技术是由⼀位能⼲的 Microsoft 程序员查尔斯- 西蒙尼(Charles Simonyi) 提出的.
匈⽛利命名法通过在变量名前⾯加上相应的⼩写字母的符号标识作为前缀,标识出变量的作⽤域,类型等这些符号可以多个同时使⽤,顺序是先m_(成员变量), 再指针,再简单数据类型,再其它 .
例如:m_lpszStr, 表⽰指向⼀个以0字符结尾的字符串的长指针成员变量匈⽛利命名法关键是:
标识符的名字以⼀个或者多个⼩写字母开头作为前缀;前缀之后的是⾸字母⼤写的⼀个单词或多个单词组合,该单词要指明变量的⽤途匈⽛利命名法的规则是:printEmployeePaychecks();print_employee_paychecks();
1
2
匈⽛利命名法分为系统和应⽤两种。系统着眼于类型。应⽤着眼于语义,⽐如col表⽰⾏,c表⽰计数。
3、帕斯卡()命名法:
与骆驼命名法类似只不过骆驼命名法是⾸字母⼩写,⽽帕斯卡命名法是⾸字母⼤写,如:
pascal命名规则:⼤驼峰式命名规则
⼆、三种命名规则的⼩结:
以上个⼈理解。总的来说,命名的最终⽬的是增加易读性,可读性。
三、命名的基本原则
1. 标识符的命名要清晰、明了,有明确含义,同时使⽤完整的单词或⼤家基本可以理解的缩写,避免使⼈产⽣误解——尽量采⽤采⽤英
⽂单词或全部中⽂全拼表⽰,若出现英⽂单词和中⽂混合定义时,使⽤连字符“_”将英⽂与中⽂割开。较短的单词可通过去掉“元⾳”形成缩写;较长的单词可取单词的头⼏个字母形成缩写;⼀些单词有⼤家公认的缩写。例如:temp->tmp、flag->标志寄存器、statistic->stat、increment->inc、message->msg等缩写能够被⼤家基本认可。
2. 命名中若使⽤特殊约定或缩写,则要有注释说明。应该在源⽂件的开始之处,对⽂件中所使⽤的缩写或约定,特别是特殊的缩写,进
⾏必要的注释说明。
3. ⾃⼰特有的命名风格,要⾃始⾄终保持⼀致,不可来回变化。个⼈的命名风格,在符合所在项⽬组或产品组的命名规则的前提下,才
可使⽤。(即命名规则中没有规定到的地⽅才可有个⼈命名风格)。
4. 对于变量命名,禁⽌取单个字符(如i 、j 、k… ),建议除了要有具体含义外,还能表明其变量类型、数据类型等,但i 、j 、k 作局部循
环变量是允许的。变量,尤其是局部变量,如果⽤单个字符表⽰,很容易敲错(如i写成j),⽽编译时⼜检查不出来,有可能为了这个⼩⼩的错误⽽花费⼤量的查错时间。
5. 除⾮必要,不要⽤数字或较奇怪的字符来定义标识符。
6. 命名规范必须与所使⽤的系统风格保持⼀致,并在同⼀项⽬中统⼀。
7. 在同⼀软件产品内,应规划好接⼝部分标识符(变量、结构、函数及常量)的命名,防⽌编译、链接时产⽣冲突。对接⼝部分的标识符应
该有更严格限制,防⽌冲突。如可规定接⼝部分的变量与常量之前加上“模块”标识等。
8. ⽤正确的反义词组命名具有互斥意义的变量或相**作的函数等。
下⾯是⼀些在软件中常⽤的反义词组。属性+类型+描述属性⼀般是⼩写字母+_:g_:全局变量m_:类成员变量s_:静态变量c_:常量类型就多了:b :bool sz :以零结束的字符串p :指针n :整整dw :双字l :长整型⽆符号:u
函数:fn
1
2
3
4
5
6
7
8
9
10
11
12
13
14DisplayInfo ();
string UserName ;
1MyData 就是⼀个帕斯卡命名的⽰例 ⽽myData 是⼀个骆驼命名法,它第⼀个单词的第⼀个字母⼩写,后⾯的单词⾸字母⼤写,看起来像⼀个骆驼
⽽iMyData 是⼀个匈⽛利命名法,它的⼩写的i 说明了它的型态,后⾯的和帕斯卡命名相同,指⽰了该变量的⽤途.
1
2
9. 除了编译开关/ 头⽂件等特殊应⽤,应避免使⽤_EXAMPLE_TEST_ 之类以下划线开始和结尾的定义。
四、变量名的命名规则
1. 变量的命名规则要求⽤“匈⽛利法则”。
开头字母⽤变量的类型,其余部分⽤变量的英⽂意思、英⽂的缩写、中⽂全拼或中⽂全拼的缩写,要求单词的第⼀个字母应⼤写。
即: 变量名=变量类型+变量的英⽂意思(或英⽂缩写、中⽂全拼、中⽂全拼缩写) 对⾮通⽤的变量,在定义时加⼊注释说明,变量定义尽量可能放在函数的开始处。
2. 指针变量命名的基本原则为:
对⼀重指针变量的基本原则为:“p”+变量类型前缀+命名,如⼀个float*型应该表⽰为pfStat。对⼆重指针变量的基本规则
为:“pp”+变量类型前缀+命名。对三重指针变量的基本规则为:“ppp”+变量类型前缀+命名。
3. 全局变量⽤g_开头,如⼀个全局的长型变量定义为g_lFailCount。
即:变量名=g_+变量类型+变量的英⽂意思(或缩写)。此规则还可避免局部变量和全局变量同名⽽引起的问题。
4. 静态变量⽤s_开头,如⼀个静态的指针变量定义为s_plPerv_Inst。
即: 变量名=s_+变量类型+变量的英⽂意思(或缩写)即: 变量名=s_+变量类型+变量的英⽂意思(或缩写)
5. 对枚举类型(enum)中的变量,要求⽤枚举变量或其缩写做前缀。并且要求⽤⼤写。如:add / remove begin / end create / destroy insert / delete first / last g et / release increment / decrement put / get add / delete lock / unlock open / close min / max old / new start / stop next / previous source / target show / hide send / receive source / destination cut / paste up / down ⽰例:intmin_sum ;intmax_sum ;intadd_user ( BYTE *user_name );
intdelete_user ( BYTE *user_name );
1
2
3
4
5
6
7
8
9
const的作用10
11
12bool ⽤b 开头 b 标志寄存器int  ⽤i 开头 iCount short  int  ⽤n 开头 nStepCount long  int  ⽤l 开头 lSum char ⽤c 开头 cCount unsigned  char  ⽤by 开头float  ⽤f 开头 fAvg double  ⽤d 开头 dDeta unsigned  int (WORD ) ⽤w 开头 wCount unsigned  long  int (DWORD ) ⽤dw 开头 dwBroad 字符串 ⽤s 开头 sFileName
⽤0结尾的字符串 ⽤sz 开头 szFileName
1
2
3
4
5
6
7
8
9
10
11enum  cmEMDAYS {EMDAYS_MONDAY ;EMDAYS_TUESDAY ;……
};
1
2
3
4
5
6. 对struct、union变量的命名要求定义的类型⽤⼤写。并要加上前缀,其内部变量的命名规则与变量命名规则⼀致。结构⼀般⽤S开头,如:
联合体⼀般⽤U开头,如:
7. 对常量(包括错误的编码)命名,要求常量名⽤⼤写,常量名⽤英⽂表达其意思。当需要由多个单词表⽰时,单词与单词之间必须采⽤连字符“_”连接。
如:#define CM_FILE_NOT_FOUND CMMAKEHR(0X20B) 其中CM表⽰类别。
8. 对const 的变量要求在变量的命名规则前加⼊c_。
即:c_+变量命名规则;⽰例:const char* c_szFileName;即:c_+变量命名规则;⽰例:const char* c_szFileName;
五、函数的命名规范
1. 函数的命名应该尽量⽤英⽂(或英⽂缩写、中⽂全拼、中⽂全拼缩写)表达出函数完成的功能——函数名应准确描述函数的功能。遵循动
宾结构的命名法则,函数名中动词在前,并在命名前加⼊函数的前缀,函数名的长度不得少于8个字母。函数名⾸字⼤写,若包含有两个单词的每个单词⾸字母⼤写。如果是OOP ⽅法,可以只有动词(名词是对象本⾝)。⽰例:
2. 避免使⽤⽆意义或含义不清的动词为函数命名。如使⽤process、handle等为函数命名,因为这些动词并没有说明要具体做什么。
3. 必须使⽤函数原型声明。函数原型声明包括:引⽤外来函数及内部函数,外部引⽤必须在右侧注明函数来源: 模块名及⽂件名;内部
函数,只要注释其定义⽂件名——和调⽤者在同⼀⽂件中(简单程序)时不需要注释。应确保每个函数声明中的参数的名称、类型和定义中的名称、类型⼀致。
六、函数参数命名规范
1. 参数名称的命名参照变量命名规范。
2. 为了提⾼程序的运⾏效率,减少参数占⽤的堆栈,传递⼤结构的参数,⼀律采⽤指针或引⽤⽅式传递。
3. 为了便于其他程序员识别某个指针参数是⼊⼝参数还是出⼝参数,同时便于编译器检查错误,应该在⼊⼝参数前加⼊const标志。如:……cmCopyString(const CHAR * c_szSource, CHAR * szDest)
⽂件名(包括动态库、组件、控件、⼯程⽂件等)的命名规范⽂件名的命名要求表达出⽂件的内容,要求⽂件名的长度不得少于5个字母,严禁使⽤象file1,myfile之类的⽂件名。struct  ScmNPoint {int  nX ;//点的X 位置int  nY ; //点的Y 位置};
1
2
3
4union  UcmLPoint {LONG lX ;LONG lY ;
}
1
2
3
4LONG GetDeviceCount (……);void  print_record ( unsigned  int  rec_ind ) ;intinput_record ( void  ) ;
unsigned  char  get_current_color ( void  ) ;
1
2
3

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。