C/C++变量命名规范
来源:互联网 发布:88端口怎么起 编辑:程序博客网 时间:2024/05/19 13:19
类中的数据变量名
m_(前缀,后面介绍)(有意义名字)
总结书
1>c:\users\administrator\desktop\c++_test_project\图书管理系统\图书管理系统\function.cpp(11): error C2628: “CBook”后面接“void”是非法的(是否忘记了“;”?)
变量的规范命名是为了增强代码的可读性和容易维护性。C++程序变量命名只有几条必须遵守的“死规则”,这些规则如下:
1.变量名只能是字母(A-Z,a-z)、数字(0-9)或下画线。
2.第一个字母不能是数字,例如2Lerver这不是一个合法的C++变量。
3.不能是c++关键字,例如不能用class这个单词来命名一个变量。
4.区分大小写,例如iA和ia是两个不同的变量。
理论上,在遵守了上面几条规则的前提下,所声明的变量名称都是合法的。比如下面的命名:
- char xueshengming[20]; // 学生名
- char a; // 命名一个整数,但变量名毫无意义
这样的变量命名尽管是合法的,但可读性非常差。正规的软件公司,对于变量命名往往都有自己的一个推荐规范。不同公司的规范又会有一些差别。当一个程序员从一个公司跳槽到另一个公司,甚至会出现不习惯新公司代码规范的现象。
万事万物,要是有一个统一的规范,也许程序员这个行业会少一些烦恼。俗话说得好:没有规矩,不成方圆。以下是笔者多年编码得出的变量命名的心得体会,在此总结如下,并奢望有招一日能成为行业规范。
1.变量命名的宗旨:用最短的字符表示最多的意义。
- int iPosX; // Pos表示位置,X表示横坐标
2.使用变量前缀
在变量前带上小写前缀可以很直观的看出变量的数据类型,而不必到变量的定义处去查看。常用的数据类型推荐变量前缀:
l 整型的前缀
- short sValue; // s为short的前缀
- int iAge; // i为int的前缀
- unsigned int uiAge; // ui为unsigned int的前缀(两个单词的首字母)
- long lValue; // i为long的前缀
l 浮点型的前缀
- float fScore; // f为float的前缀
- double dValue; // d为double的前缀
l 字符型的前缀
- char cChar; // c为char的前缀
- TCHAR tcChar // 多字节字符和Unicode字符兼容类型的前缀tc
- wchar_t wcChar // 宽字符前缀wc
l 字符串的前缀
- char szName[30]; // sz为C语言字符串的前缀
- string strName; // str为C++字符串变量的前缀
- CString strInfo; // str为MFC字符串变量的前缀
l 布尔型的前缀
- bool bPass; // b为bool的前缀
l 指针型的前缀
- int * pValue; //p为指针的前缀
说明:由于指针是指向一定数据类型的变量,因此p后面要不要再加一个前缀一直让我举棋不定。如果再加上前缀比如:
- int * piKey;
- char * pszInfo;
这样似乎意义更完整,但势必会增加变量的字符长度。因此,这里就不硬性规定了。但是,指正变量以p开头应该是雷也打不动的。
l 数组的前缀
- int arrNum[10]; // arr为数组的前缀
说明:和指针变量一样,arr后是否再加数组元素的数据类型前缀取决于你自己。
- string arrstrName[3]; //C++字符串数组,加上去似乎很别扭
l 枚举变量的前缀
- enum emWeek; // em为枚举变量的前缀
l 结构变量的前缀:t
- T_NODE tNode; // 结构名称以T_开头
l 字节变量的前缀:by
- BYTE byInfo;
l 字变量的前缀
- DWORD dwInfo; // 双字
- WORD wInfo; // 单字
l 字符指针的前缀
- LPCTSTR ptszInfo; // ptsz表示前缀,t表示TCHAR类型
- LPCSTR pszInfo;
- LPSTR pszInfo;
l STL容器类型前缀
- vector<int> vecValue;
- //说明:vec表示vector容器的前缀,为了简化变量,变量体后面不再使用前缀
- list<double> lstInfo;
l MFC绑定控件变量的前缀
- CEdit m_ctlName; // 对象变量,变量体前统一用ctl表示
- int m_iAge; // 值变量,变量体有表示值数据类型的前缀
说明:由于长短指针在32位操作系统后已无区别,所以不再区分,一律以p开头,这也与指针变量以p开头的原则贴得更近。
l 矩形结构的前缀:rc
- RECT rcClient;
- CRect rcWin;
l 句柄对象一律以h开头
- HWND hWndName;
- HBRUSH hBr;
- HPEN hPen;
- HBITMAP hBmpBack;
l windows颜色类型的前缀:cr
- COLORREF crFront;
l windows中DC(设备上下文)类型的前缀
- CClientDC dcClient;
3. 类的成员变量以m_开头,后面为变量体,变量体依然要有前缀。
- int m_iDepth;
4. 定义一个变量,为了简化,在不影响变量意义的情况下,可以仅仅使用前缀。
- RECT rc;
5. 全局变量一律以g_开头,后面为变量体,变量体依然要有前缀。
- int g_iNums;
6. 定义结构体为了保证和C语言和C++的写法兼容性,一律采用typedef语句。
- typedef struct tagINFO_NODE
- {
- int iData;
- tagINFO_NODE , ;, ; * p, Next;
- }T_INFO_NODE, *PT_INFO_NODE;
7. 变量体如果是多个单词,每个单词的首字母大写。
- int iStudentAge;
8. 在意义明确的情况下可以仅仅使用首字母命名变量可以缩短变量名。
- int iID;
- //说明:仅使用首字母表示变量体的前提是保证变量的意义,比如变量//iStudentAge如果声明成:
- int iSA; // 这样将失去意义,不可取
9. 定义一个类使用C作为类名的前缀。
- class CStudent
- {
- …
- }
一、命名法
在编程时为提高程序的可读性及易维护性,降低程序的维护、升级成本,在程序代码的书写时除了要注意格式外还要注意变量的命名,现在流行的有两种命名法,一种是流行于Window编程(主要是由于微软的影响)的匈牙利命名法。
据说这种命名法是一位叫 Charles Simonyi 的匈牙利程序员发明的,后来他在微软呆了几年,于是这种命名法就通过微软的各种产品和文档资料向世界传播开了。现在,大部分程序员不管自己使用 什么软件进行开发,或多或少都使用了这种命名法。这种命名法的出发点是把量名变按:属性+类型+对象 描述的顺序组合起来,以使程序员作变量时对变量的类型和其它属性有直观的了解,下面是HN变量命名规范,其中也有一些是我个人的偏向:
属性部分
全局变量 g_
常量 c_
c++类成员变量 m_
静态变量 s_
类型部分
指针 p
函数 fn
无效 v
句柄 h
长整型 l
布尔 b
浮点型(有时也指文件) f
双字 dw
字符串 sz
短整型 n
双精度浮点 d
计数 c(通常用cnt)
字符 ch(通常用c)
整型 i(通常用n)
字节 by
字 w
实型r
无符号 u
描述部分
最大 Max
最小 Min
初始化Init
临时变量 T(或Temp, Tmp)
源对象 Src
目的对象Dest (或Dst
这里顺便写几个例子:
hwnd : h 是类型描述,表示句柄, wnd 是变量对象描述,表示窗口,所以 hwnd 表示窗口句柄;
pfnEatApple : pfn 是类型描述,表示指向函数的指针, EatApple 是变量对象描述,所以它表示
指向 EatApple 函数的函数指针变量。
g_cch : g_ 是属性描述,表示全局变量,c 和 ch 分别是计数类型和字符类型,一起表示变量类
型,这里忽略了对象描述,所以它表示一个对字符进行计数的全局变量。
上面就是HN命名法的一般规则。
另外一种命名法流行于Linux/Unix系统的编程者中间,不是用大小写区分各个词,而是通过下划线"_"来分割,如print_char(),send_a_byte。这种方法有好处就是不用区分大小写,因为全部用小写,但是由于每一个词之间都有一个下划线,就增长了变量、函数名的长度。这两种命名法可以根据个人爱好选择。
二、作用域与变量命名
在使用变量时为了方便可以给变量名加上前缀,如上述匈牙利命名法中的i,c,l等用于区分变量是int,char,long型,但如果一个函数中用到了全局变量还用到了局部变量,当然可以通过加前缀来实现,如g_表示全局,l_表示局部变量 m_表示类成员,但也可以采用不同的命名法来实现。如全局变量用匈牙利命名法,局部变量则采用加下划线的方式,这样一看到变量也能马上区分出是全局变量还是局部变量。
三、命名的几点建议
变量或函数名采用有意义的英文单词、词组或者缩写表示,并且整个函数名的首字母大写,而变量名首字母小写。如PutChar(), iTimeCounter, tmpCounter, SaveSettings(), ChkBuff()等。
全局变量加前缀指示数据类型,并加前缀g,整个函数内均有效的局部变量加l,且带数据类型,如果一个局部变量仅用于很小的范围内,如仅用于一个for循环中,可以不加任何前缀,并且用简短的变量名,如:
glSysClk, gipCounter(int型指针做全局变量)
...
{ int i;
for(i=0; i<5; i++){
...
}
}
...
for(int i=0; i<5; i++){
...
}
变量及函数分组命名,加前缀。全局函数加组名,静函数可以不加组名。如一组堆栈管理函数StkPush(),StkPop(), StkClr(), StkGetLength()
(待续)
- C\C++变量命名规范
- C/C++变量命名规范
- C语言变量和函数命名规范
- C#(变量、数组、控件)命名规范
- C语言 变量和函数命名规范
- C/C++变量名命名规范
- 基于C语言的变量命名规范
- C语言变量和函数命名规范
- C语言中的变量&命名规范
- c、c++变量和函数命名规范
- C语言变量和函数命名规范
- C语言变量和函数命名规范
- C 语言变量和函数命名规范
- C#-C#命名规范
- Objective-c 命名规范
- C/C++命名规范
- C/C++命名规范
- .net(C#)命名规范
- 模拟退火算法
- 求两个整数的最大公约数和最小公倍数
- bzoj1433_最大流|二分图最大匹配
- OpenDingux 编译
- matlab中的BP神经网络
- C/C++变量命名规范
- 软件测试从零开始
- BZOJ 2157 旅游 树链剖分
- 滑动式界面和消息数视图
- Servlet中filter过滤<dispatcher>FORWARD</dispatcher>标签使用
- glViewport
- linux服务器切换用户只显示-bash-4.1#不显示路径
- RankLib源码分析---MART(GBRT)
- 二叉查找树、红黑树、B树、B+树、AVL树