C++变量命名规则

  • C++变量命名规则:
  • 1、大小驼峰:
  • 2、例子:
  • 3、C++匈牙利命名法变量命名规则
  • 4、变量_函数_形参_类型_命名前缀属性部分说明:
  • 5、3.1 共性规则
  • 6、3.2 简单的Windows应用程序命名规则
  • 7、这里顺便写几个例子:


C++变量命名规则:

1、大小驼峰:

格式规则:

	1、大驼峰式命名法(upper camel case):

		每一个单词的首字母都采用大写字母,例如:FirstName、LastName、CamelCase,也被称为 Pascal 命名法。

	2、小驼峰式命名法(lower camel case):
		
		第一个单词以小写字母开始,第二个单词的首字母大写。例如:firstName、lastName。

使用场景:

	大驼峰:
		类类型,结构体类型,枚举类型,联合体类型等类型定义, 作用域名称,函数(包括全局函数,作用域函数,成员函数)

	小驼峰:
		全局变量(包括全局作用域变量,命名空间变量,类静态变量),局部变量,函数参数,类、结构体和联合体中的成员变量

	
	全大写+下划线:
		宏,常量(const),枚举值,goto 标签

2、例子:

C语言_变量:
	int my_a;

	void fun_a();
	void my_test_fun();

驼峰_Qt_变量:
	从第二个单词开始,首字母大写
	int myA

	void funA();
	void myTestFun();

类名:
	单词首字母大写
	class MyClass;

变量:成员变量和普通变量:
	成员变量: m_funA
	普通变量和Qt一样

MFC:
函数和类名命名风格一样
	void FunA();
	void MyTestFun();

变量:成员变量和普通变量:
	成员变量: m_funA
	普通变量和Qt一样

3、C++匈牙利命名法变量命名规则

1、匈牙利命名法的来历和介绍分类:C Plus Plus 匈牙利命名法是一种编程时的命名规范。

	基本原则是:变量名=属性+类型+对象描述,其中每一对象的名称都要求有明确含义,可以取对象名字全称或名字的一部分。

	举例来说,表单的名称为form,那么在匈牙利命名法中可以简写为frm,则当表单变量名称为Switchboard时,变量全称应该为 frmSwitchboard。这样可以很容易从变量名看出Switchboard是一个表单,同样,如果此变量类型为标签,那么就应命名成 lblSwitchboard。可以看出,匈牙利命名法非常便于记忆,而且使变量名非常清晰易懂,这样,增强了代码的可读性,方便各程序员之间相互交流代码。

4、变量_函数_形参_类型_命名前缀属性部分说明:

全局变量 g_ 

常量 c_ 

c++类成员变量 m_ 

静态变量 s_

 

类型部分:

pointer:指针:		p 

long pointer: 		lp

function:函数:		fn 

无效 v 

句柄 h 

long长整型 			l 

bool,BOOL,布尔:	b 

float:浮点型(有时也指文件): f 

DWORD:双字:			dw 

string,字符串:		str

short,短整型:		n 

double,双精度浮点:	d 

计数:				c(通常用cnt) 

char,字符:			ch(通常用c) 

char[],TCHAR[]:	通常用sz

int, __int16,__int32,__int64,整型 :		通常用n 

BYTE,字节:			by 

WORD,字:			w 

实型:				r 

unsigned,无符号:	u

类型缩写:			(type)


描述部分:

最大 Max 

最小 Min 

初始化 Init 

临时变量 T(或Temp) 

源对象 Src 

目的对象 Dest

保护成员函数    				保护成员函数的开头应当加上一个下划线“_”以示区别,例如:"_SetState()" ....

私有成员函数    				类似地,私有成员函数的开头应当加上两个下划线“__”,例如:"__DestroyImp()" ....

虚函数    						虚函数习惯以“Do”开头,如:"DoRefresh()", "_DoEncryption()" ....

回调和事件处理函数    			回调和事件处理函数习惯以单词“On”开头。例如:"_OnTimer()", "OnExit()" ....

全局函数必须以小写前缀"g"开头。


函数形参命名:(自定义)			函数形参的命名采用Camel命名法中的下划线法,形参变量名全部小写.由作用域前缀+'_'+变量名组成.

结构体、宏、枚举变量、联合体			全部由前缀+大写字母组成,单词间使用下划线界定。

	5.1结构体:加小写前缀"tag",之后以大写字母开头。
	例:
	typedef struct tagPOINT
	{

	int x;

	int y;

	} POINT;


宏:			宏名加小写前缀"def".		例:#define defMAXNUMBER 100


枚举变量:		加小写前缀"enum"。

		例:

		typedef enum _CFILE_OPEN_MODE
		{
		enumOPEN_READONLY = 0,

		enumOPEN_READWRITE = 1,

		enumCREATE_ALWAY = 3
		} CFILE_OPEN_MODE;


联合体:			加小写前缀"uni"。

		例:

		typedef union _VARIANT
		{

		char unichVal;

		int uninVal;

		float uniftVal;

		} VARIANT;

5、3.1 共性规则

本节论述的共性规则是被大多数程序员采纳的,我们应当在遵循这些共性规则的前提下,再扩充特定的规则,如3.2节。



l 【规则3-1-1】标识符应当直观且可以拼读,可望文知意,不必进行“解码”。

	标识符最好采用英文单词或其组合,便于记忆和阅读。切忌使用汉语拼音来命名。程序中的英文单词一般不会太复杂,用词应当准确。例如不要把CurrentValue写成NowValue。



l 【规则3-1-2】标识符的长度应当符合“min-length && max-information”原则。

	几十年前老ANSI C规定名字不准超过6个字符,现今的C++/C不再有此限制。一般来说,长名字能更好地表达含义,所以函数名、变量名、类名长达十几个字符不足为怪。那么 名字是否越长约好?不见得! 例如变量名maxval就比maxValueUntilOverflow好用。单字符的名字也是有用的,常见的如i,j,k,m,n,x,y,z等,它们通常可用作函数内的局部变量。



l 【规则3-1-3】命名规则尽量与所采用的操作系统或开发工具的风格保持一致。

	例如Windows应用程序的标识符通常采用“大小写”混排的方式,如AddChild。而Unix应用程序的标识符通常采用“小写加下划线”的方式,如add_child。别把这两类风格混在一起用。


l 【规则3-1-4】程序中不要出现仅靠大小写区分的相似的标识符。

	例如:

	int x, X; // 变量x 与 X 容易混淆

	void foo(int x); // 函数foo 与FOO容易混淆

	void FOO(float x);


l 【规则3-1-5】程序中不要出现标识符完全相同的局部变量和全局变量,尽管两者的作用域不同而不会发生语法错误,但会使人误解。


l 【规则3-1-6】变量的名字应当使用“名词”或者“形容词+名词”。

	例如:

	float value;

	float oldValue;

	float newValue;



l 【规则3-1-7】全局函数的名字应当使用“动词”或者“动词+名词”(动宾词组)。类的成员函数应当只使用“动词”,被省略掉的名词就是对象本身。

	例如:

	DrawBox(); // 全局函数

	box->Draw(); // 类的成员函数



l 【规则3-1-8】用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。

	例如:

	int minValue;

	int maxValue;

	 

	int SetValue(…);

	int GetValue(…);



2 【建议3-1-1】尽量避免名字中出现数字编号,如Value1,Value2等,除非逻辑上的确需要编号。这是为了防止程序员偷懒,不肯为命名动脑筋而导致产生无意义的名字(因为用数字编号最省事)。

6、3.2 简单的Windows应用程序命名规则

作者对“匈牙利”命名规则做了合理的简化,下述的命名规则简单易用,比较适合于Windows应用软件的开发。



l 【规则3-2-1】类名和函数名用大写字母开头的单词组合而成。

	例如:

	class Node; // 类名

	class LeafNode; // 类名

	void Draw(void); // 函数名

	void SetValue(int value); // 函数名



l 【规则3-2-2】变量和参数用小写字母开头的单词组合而成。

	例如:

	BOOL flag;

	int drawMode;



l 【规则3-2-3】常量全用大写的字母,用下划线分割单词。

	例如:

	const int MAX = 100;

	const int MAX_LENGTH = 100;



l 【规则3-2-4】静态变量加前缀s_(表示static)。

	例如:

	void Init(…)

	{

	static int s_initValue; // 静态变量

	…

	}



l 【规则3-2-5】如果不得已需要全局变量,则使全局变量加前缀g_(表示global)。

	例如:

	int g_howManyPeople; // 全局变量

	int g_howMuchMoney; // 全局变量



l 【规则3-2-6】类的数据成员加前缀m_(表示member),这样可以避免数据成员与成员函数的参数同名。

	例如:

	void Object::SetValue(int width, int height)

	{

	m_width = width;

	m_height = height;

	}



l 【规则3-2-7】为了防止某一软件库中的一些标识符和其它软件库中的冲突,可以为各种标识符加上能反映软件性质的前缀。

	例如三维图形标准OpenGL的所有库函数均以gl开头,所有常量(或宏定义)均以GL开头。

7、这里顺便写几个例子:

hwnd : h 是类型描述,表示句柄, wnd 是变量对象描述,表示窗口,所以 hwnd 表示窗口句柄; 

pfnEatApple : pfn 是类型描述,表示指向函数的指针, EatApple 是变量对象描述,所以它表示 指向 EatApple 函数的函数指针变量。

g_cch : g_ 是属性描述,表示全局变量,c 和 ch 分别是计数类型和字符类型,一起表示变量类 型,这里忽略了对象描述,所以它表示一个对字符进行计数的全局变量。