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 分别是计数类型和字符类型,一起表示变量类 型,这里忽略了对象描述,所以它表示一个对字符进行计数的全局变量。