### 标识符

在 C++语言中，变量、常量、函数、标签和用户定义的各种对象，被称之为标识符。标识符由一个或多个字符构成。字符可以是字母、数字或下划线，但是标识符的首字符必须是字母或下划线，而不能是数字。例如，下面的标识符均是合法的。

maxAge, num,_sex

而下面的标识符是非法的。

1maxAge,nu!m,

在 C++语言中，标识符是区分大小写的。例如，“value”和“Value”是两个不同的标识符。此外，标识符不能与 C/C++的关键字同名。

注意：C++语言中标识符的长度可以是任意的，但是通常情况下，前1024个字符是有意义的，这是与C语言不同的。在C语言中，标识符也可以是任意长度，但是，在外部链接进程中调用该标识符时，通常前6个字符是有效的，例如，被多个文件共享的全局函数或变量。如果标识符不用于外部进程链接，通常前31个字符是有效的。此外，C++语言中的关键字也不能作为标识符。

在开发应用程序时，程序开发人员通常会为标识符起一个有意义的名字。例如，使用 nMaxLength 表示最大长度，使用 chSex 表示性别。

int nMaxLength;

char chSex[5];

而不应该定义一些不着边际的标识符。例如：

int ml

char nv;

这样的标识符很难让人理解，即使我们为这些标识符添加了注释说明。也会让别人难以理解。因为你的标识符可能在代码的多处地方出现。

此外，在定义标识符时，应采用英文单词或单词的缩写形式，而不要使用汉语拼音或汉语拼音的简写。例如下面标识符的定义。

int zdcd; //最大长度

char xb[5]; //性别

使用汉语拼音，同样不容易让人理解。而使用单词或单词缩写则可以更直观的显示出标识符的含义。例如：

int MaxLength; //最大长度

int MaxLen; //最大长度

这样，别人可以很容易知道标识符的含义，即使没有标记注释。

在许多软件开发公司中都有自己的一套编码规范。其中有详细的编码规则，我们在新进入一家软件公司时，首先需要了解公司的编码规则，使自己能够编写出容易让其他人理解的代码，也能够让自己更容易的阅读其他人的代码。

通常，在使用 Visual C++开发应用程序时，有一些约定俗成的标识符命名规范，它可能与你所在公司的编码规范不同，但是它是 Visual C++社区开发人员愿意采用的方式。下面我们列举一些。

l 不同类型的对象使用类型作为标识符的前缀

例如，我们定义一个整型变量，为了表示变量的类型，使用小写字符 n 做前缀。

int nKindCount; //种类数量

int nAge; //年龄

对于 DWORD 类型变量，使用 dw 字符作为前缀。

DWORD dwFileLen; //文件长度

DWORD dwCurFrame; //当前帧数

表 1 显示了常用数据类型前缀。

表 1 标识符前缀

数据类型 | 前缀 | 示例
int,UINT | n | nKindCount
DWORD | dw | dwFileLen
bool,BOOL | b | bChecked
WORD | w | wCount
LONG,long | l | lHeight
*（指针） | p | PWnd
FAR * | lp | lpParam
LPCSTR,LPCTSTR | lpsz | lpszText
BYTE | by | bySize
char,TCHAR | ch | chSex
char*,char[] | sz | szText
函数指针 | lpfn | lpfnWndProc
float | f | fRate
double | dbl | dblLength

表 2 显示了 Windows 常用数据类型前缀。

表 2 Windows 常用数据类型前缀

数据类型 | 前缀 | 示例
COLORREF | cr | crBlue
HWND | h | hWnd
HDLG | h | hDlg
HMENU | h | hMenu
HRGN | h | hRgn
HPEN | h | hPen
HRUSH | h | hBrush
HFONT | h | hFont
HBITMAP | h | hBitmap
HPALETTE | h | hPalette

表 3 显示了 MFC 中常用数据类型前缀。

表 3 MFC 中常用数据类型前缀

数据类型 | 前缀 | 示例
CRect | cr | crClient
CWnd* | p | pWnd
CDC* | p | pDC
CMenu* | p | pMenu
CPen* | p | pPen
CRgn* | p | pRgn
CBrush* | p | pBrush
CBitmap* | p | pBitmap
CPalette* | p | pPalette
CFont* | p | pFont

l 成员变量使用 m_作为前缀

在定义类的成员变量时，成员变量以 m_作为前缀。例如：

m_nAge;

m_szSex;

l 类名以大写字母 C 作为前缀

在定义类时，类名通常以大写字母 C 作为前缀。例如：

class CStudent;

class CstudentManage;

l 全局对象以 g_作为前缀

在程序中需要定义全局对象时，对象名应以 g_为前缀。例如：

g_Connection;

g_Recordset;

g_App;

提示：在程序中应尽量避免使用全局对象。

l 接口以 I 为前缀

在程序中定义接口时，接口名以 I 为前缀。例如：

IUnknown;

IInterface;