C++编码规范(2):命名规范
2015-11-11 13:25
363 查看
如果你代码中的变量名,函数数,类名都取得很好,不仅是个有意义的词或短语,而且确切的表达了该变量或函数的功能.那读起代码来就像看文章一样,绝对是一种享受.当然理想是美好的,现实可是残酷的.很少有人能做到这样.一来嘛你英语词汇量得多,不样不容易找到那么多合适并贴切的词.二来就是有些词组合就会很长,这样不得不用些缩写,而缩写就不是每个人都认识,对一些人来说和无意义的字母没啥区别,只要你英语好才能一眼瞧出来.
当然当你使用一个编程语言的话,里面已经弄出很多词来做关键字了,当你看熟了看多了后就会看着很舒服很顺眼.但如果你学个啥框架,比如MFC,突然发现那么多宏名,还有一些类型名(其实也是宏转换整出来的). 就会觉得非常不顺眼,非常丑陋.这些类型名大部分是一些缩写,虽然是代表着确切的意思,但由于缩写的太厉害了,你跟瞧着一堆没意义的字母没啥区别.当然你要用多了看着也就顺眼了.
关于命名有两个比较出名的专业名词:Hungarian(匈牙利) , Camel(骆驼) , Pascal(帕斯卡)
例如int m_iNumber;
如果是局部变量一般就不需要属性了,所以就是int iNumber;
1.其中对象描述的名称都要求有明确含义,可以取对象名字全称或名字的一部分.可以起自解释的作用,从名字中就可以看出变量的功能.
2.其中属性(有个下划线)包括: g_表示全局变量, c_表示常量 , m_表示C++类成员变量, s_ 表示静态变量 , sm_表示静态成员变量
3.类型部分都是用类型关键字的缩写表示:
据说这种命名法是一们叫Charles Simonyi的匈牙利程序员发明的,他也在微软工作过.所以你查看MFC中的一些源码会发现都用的匈牙利命名法,你要是开发中用到MFC可能也倾向于使用这种命名规范.
缺点是添加这些前缀会使变量名变长,变量名一长就会显得不雅,另外就是开发人员要多敲几个字母.当然还有其他很多缺点.
另外就是匈牙利命名主要针对基本类型变量名,但在面向对象语言中肯定到处是类名和函数名,那类名和函数名该怎么取呢? 此时在它们前面加个啥前缀没有太多意义的.
此时变量名=属性+类型+对象描述 ,中最有对象描述这一项可派得上用场了,但是对象描述可没给我们带来啥明确的格式指导,比如描述信息一长,就很不利于我们眼睛的识别.
于是就需要一些规范应用于对象描述的格式,另外一些命名规范就出现了.
于是这种命名法就借鉴了这个特征,让变量名通过某些字母大写来达到凹凸的效果,这有利于眼睛识别,因为如果都是小写或大写都不利于眼睛识别.
小驼峰命名法
除第一个单词首字母小写,其他单词首字母大写.
例如 int myPhoneNumber;
大驼峰命名法(又叫Pascal法)
所以单词首字母大写
例如 void GetPhoneNumber();
实际上驼峰命名法与匈牙利命名法并不冲突,有时还可以综合使用.
匈牙利法是
变量名=属性+类型+对象描述
我们可以让前两者不变,只在对象描述中应用驼峰法.当然了也可以中单独使用驼峰法,不需要属性和类型信息.
在C#中基本上习惯上只使用驼峰法,不再需要属性或类型的信息.因为VS这开发环境的智能感觉支持的非常好,你把鼠标放哪个变量上会马上显示出类型等相关信息.而且由于C#中在隐式类型转换时要求较严,必须是精度不会降低,不会出现溢出.所以类型信息对我们用处也不是太大了.最重要的是对象描述的功能性信息了.
一般函数名和类名都用大驼峰命名法,不过在MFC中类名一般推荐是匈牙利与驼峰结合的变体,类前面加一个大写的字母C,后面部分就是大驼峰法了
比如int MY_NUMBER;
一般用的不多,不过像PL/SQL里面就用的特别多,因为PL/SQL不像C++和C#变量是区分大小写的.所以下划线可能更好点.
在C++中一般宏都全部大写,然后单词间用下划线分开.
当然当你使用一个编程语言的话,里面已经弄出很多词来做关键字了,当你看熟了看多了后就会看着很舒服很顺眼.但如果你学个啥框架,比如MFC,突然发现那么多宏名,还有一些类型名(其实也是宏转换整出来的). 就会觉得非常不顺眼,非常丑陋.这些类型名大部分是一些缩写,虽然是代表着确切的意思,但由于缩写的太厉害了,你跟瞧着一堆没意义的字母没啥区别.当然你要用多了看着也就顺眼了.
关于命名有两个比较出名的专业名词:Hungarian(匈牙利) , Camel(骆驼) , Pascal(帕斯卡)
匈牙利命名法
变量名=属性+类型+对象描述.例如int m_iNumber;
如果是局部变量一般就不需要属性了,所以就是int iNumber;
1.其中对象描述的名称都要求有明确含义,可以取对象名字全称或名字的一部分.可以起自解释的作用,从名字中就可以看出变量的功能.
2.其中属性(有个下划线)包括: g_表示全局变量, c_表示常量 , m_表示C++类成员变量, s_ 表示静态变量 , sm_表示静态成员变量
3.类型部分都是用类型关键字的缩写表示:
类型名 | 缩写 |
char | c |
short | s |
int | i |
long | l |
unsigned char | uc |
unsigned short | us |
unsigned int | ui |
unsigned long | ul |
float | f |
double | d |
long double | ld |
bool | b |
void | v |
pointer | p |
enum | n |
struct | x |
union | w |
array | a |
windows类型 | |
string | sz |
DWORD | dw |
HANDLE | h |
TCHAR | tc |
WCHAR | wc |
smart pointer | sp |
LPSTR | pc |
LPTSTR | ptc |
LPWSTR | pwc |
优点与缺点:
匈牙利命名的优点显而易见,能从名字本身获取到很多信息,知道变量的类型或要实现的功能.缺点是添加这些前缀会使变量名变长,变量名一长就会显得不雅,另外就是开发人员要多敲几个字母.当然还有其他很多缺点.
另外就是匈牙利命名主要针对基本类型变量名,但在面向对象语言中肯定到处是类名和函数名,那类名和函数名该怎么取呢? 此时在它们前面加个啥前缀没有太多意义的.
此时变量名=属性+类型+对象描述 ,中最有对象描述这一项可派得上用场了,但是对象描述可没给我们带来啥明确的格式指导,比如描述信息一长,就很不利于我们眼睛的识别.
于是就需要一些规范应用于对象描述的格式,另外一些命名规范就出现了.
驼峰命名法
骆驼有一个很明显的特征就是背像个山峰一样,有凹下去与凸起来的部分.于是这种命名法就借鉴了这个特征,让变量名通过某些字母大写来达到凹凸的效果,这有利于眼睛识别,因为如果都是小写或大写都不利于眼睛识别.
小驼峰命名法
除第一个单词首字母小写,其他单词首字母大写.
例如 int myPhoneNumber;
大驼峰命名法(又叫Pascal法)
所以单词首字母大写
例如 void GetPhoneNumber();
实际上驼峰命名法与匈牙利命名法并不冲突,有时还可以综合使用.
匈牙利法是
变量名=属性+类型+对象描述
我们可以让前两者不变,只在对象描述中应用驼峰法.当然了也可以中单独使用驼峰法,不需要属性和类型信息.
在C#中基本上习惯上只使用驼峰法,不再需要属性或类型的信息.因为VS这开发环境的智能感觉支持的非常好,你把鼠标放哪个变量上会马上显示出类型等相关信息.而且由于C#中在隐式类型转换时要求较严,必须是精度不会降低,不会出现溢出.所以类型信息对我们用处也不是太大了.最重要的是对象描述的功能性信息了.
一般函数名和类名都用大驼峰命名法,不过在MFC中类名一般推荐是匈牙利与驼峰结合的变体,类前面加一个大写的字母C,后面部分就是大驼峰法了
下划线命名法
就是单词之间用下划线连接比如int MY_NUMBER;
一般用的不多,不过像PL/SQL里面就用的特别多,因为PL/SQL不像C++和C#变量是区分大小写的.所以下划线可能更好点.
在C++中一般宏都全部大写,然后单词间用下划线分开.
相关文章推荐
- C++编码规范(1):代码注释
- C/C++小知识总结之一。记录于此,以备查询之需。
- VC++使用内联汇编的例子:冒泡法排序(从大到小排序)
- VC++使用内联汇编的例子:冒泡法排序(从小到大)
- 黑马程序员——C语言基础06—数组
- C语言单链表逆序
- c++builder 程序升级到c++builder10Seattle
- VC++深入详解学习记录
- QML与c++混合编程
- 【C++基础之二】常量指针和指针常量
- [收藏]C++ STL中Map的按Key排序和按Value排序
- [原]支付宝无线支付服务端接入C++
- C、C++函数和类库详解(VC++版)
- C# 调用C++DLL传递的bool型,返回混乱
- C++ 静态变量的初始化 以及 vector的初始化
- c++内存安全问题
- 【C++模版之旅】神奇的Traits
- 【编程开发】 C与C++中的关于函数指针的强制类型转换与指针函数的关系
- 黑马程序员——C语言基础05—函数
- C++ 编码规范