最全C++命名规则


最全C++变量命名规则

a Array 数组
b BOOL (int) 布尔(整数)
by Unsigned Char (Byte) 无符号字符(字节)
c Char 字符(字节)
cb Count of bytes 字节数
cr Color reference value 颜色(参考)值
cx Count of x (Short) x的集合(短整数)
dw DWORD (unsigned long) 双字(无符号长整数)
f Flags   标志(一般是有多位的数值)
fn Function 函数
g_ global 全局的
h Handle 句柄
i Integer 整数
l Long 长整数
lp Long pointer 长指针
m_ Data member of a class 一个类的数据成员
n Short int 短整数
p Pointer 指针
s String 字符串
sz  Zero terminated String 以0结尾的字符串
tm Text metric 文本规则
u Unsigned int 无符号整数
ul Unsigned long (ULONG) 无符号长整数
w WORD (unsigned short) 无符号短整数
x,y x, y coordinates (short) 坐标值/短整数
v void 空

g_ 全局变量 g_Servers
C 类或者结构体 CDocument,CPrintInfo
m_ 成员变量 m_pDoc,m_nCustomers

VC常用前缀列表:
前缀 类型 描述 例子
ch char 8位字符 chGrade
ch TCHAR 16位UNICODE类型字符 chName
b BOOL 布尔变量 bEnabled
n int 整型(其大小由操作系统决定) nLength
n UINT 无符号整型(其大小由操作系统决定) nLength
w WORD 16位无符号整型 wPos
l LONG 32位有符号整型 lOffset
dw DWORD 32位无符号整型 dwRange
p * Ambient memory model pointer 内存模块指针,指针变量 pDoc
lp FAR* 长指针 lpDoc
lpsz LPSTR 32位字符串指针 lpszNam
lpsz LPCSTR 32位常量字符串指针 lpszName
lpsz LPCTSTR 32位UNICODE类型常量指针 lpszName
h handle Windows对象句柄 hWnd
lpfn (*fn)() 回调函数指针 Callback Far pointer to CALLBACK function lpfnAbort


Windows对象名称缩写:
Windows对象 例子变量 MFC类 例子对象
HWND hWnd; CWnd* pWnd;
HDLG hDlg; CDialog* pDlg;
HDC   hDC; CDC* pDC;
HGDIOBJ hGdiObj; CGdiObject* pGdiObj;
HPEN hPen; CPen* pPen;
HBRUSH hBrush; CBrush* pBrush;
HFONT hFont; CFont* pFont;
HBITMAP hBitmap; CBitmap* pBitmap;
HPALETTE hPalette; CPalette* pPalette;
HRGN hRgn; CRgn* pRgn;
HMENU hMenu; CMenu* pMenu;
HWND hCtl; CStatic* pStatic;
HWND hCtl; CButton* pBtn;
HWND hCtl; CEdit* pEdit;
HWND hCtl; CListBox* pListBox;
HWND hCtl; CComboBox* pComboBox;

VC常用宏定义命名列表:
前缀 符号类型 符号例子 范围
IDR_ 标识多个资源共享的类型 IDR_MAINFRAME 1~0x6FFF
IDD_ 对话框资源(Dialog) IDD_SPELL_CHECK 1~ 0x6FFF
HIDD_ 基于对话框的上下文帮助 HIDD_SPELL_CHECK 0x20001~0x26FF
IDB_ 位图资源(Bitmap) IDB_COMPANY_LOGO 1~0x6FFF
IDC_ 光标资源(Cursor) IDC_PENCIL 1~0x6FFF
IDI_ 图标资源(Icon) IDI_NOTEPAD 1~0x6FFF
ID_ /IDM_ 工具栏或菜单栏的命令项 ID_TOOLS_SPELLING 0x8000~0xDFFF
HID_ 命令上下文帮助 HID_TOOLS_SPELLING 0x18000~0x1DFFF
IDP_ 消息框提示文字资源 IDP_INVALID_PARTNO 8~0xDFFF
HIDP_ 消息框上下文帮助 HIDP_INVALID_PARTNO 0x30008~0x3DFFF
IDS_ 字符串资源(String) IDS_COPYRIGHT 1~0x7FFF
IDC_ 对话框内的控制资源 IDC_RECALC 8~0xDFFF

Windows.h中新的命名规范
类型 定义描述
WINAPI 使用在API声明中的FAR PASCAL位置,如果正在编写一个具有导出API人口点的            DLL,则可以在自己的API中使用该类型
CALLBACK 使用在应用程序回调程序,如窗口和对话框过程中的FAR PASCAL的位置
LPCSTR 与LPSTR相同,只是LPCSTR用于只读串指针,其定义类似(const char FAR*)
UINT 可移植的无符号整型类型,其大小由主机环境决定(对于Windows NT和Windows 9x为32位);它是unsigned int的同义词
LRESULT 窗口程序返回值的类型
LPARAM 声明lParam所使用的类型,lParam是窗口程序的第四个参数
WPARAM 声明wParam所使用的类型,wParam是窗口程序的第三个参数
LPVOID 一般指针类型,与(void *)相同,可以用来代替LPSTR

C++ 命名规范

在一个项目中,命名风格保持一致,否则会降低源码的可读性。

命名必须要注意的两点:

1)永远不要使用晦涩的名字

2)总是使用全大写字母表示宏和常量

匈牙利命名法:

匈牙利命名法的一个特点是将类型信息混入名称中,例如:

int nNum = 0; // n 为类型信息,表明 nNum 是一个 int 类型

class CUser; // C 为类型信息,表明 CUser 是一个类

通常的观点认为,在名称中加入类型信息会增加代码的可读性,实际上,这种效果甚微。加入类型信息的不良表现之一是降低可维护性,一个很简单的例子:

class CUser

{

private:

    int m_nID;

}

如果出现某种情况导致需要修改 m_nID 的类型为 long,那么 m_nID 应该改名字为 m_lID,那么意味着要在整个类中修改 m_nID。更糟糕的情况是:

class CHome

{

public:

    void f();

}

void CHome::f()

{

    int nID = m_pUser->GetID(); // nID 需要改成 lID

   // 下面大量使用 nID

}

可见,CHome 中的 f 函数的局部变量 nID 在 id 类型由 int 变成 long 时也受到了影响。

总的来说是将类型信息引入名称中致使维护成本增加,我们本无需因为类型的改变维护名称,匈牙利命名法将类型绑定在名称上,使得必须在类型变动时维护名称。

在泛型编程中,几乎无法使用匈牙利命名法,因为具体的类型信息并不存在。

除非你使用纯文本编辑器,否则名称中加入类型信息的做法不会为你增加任何可读性(现代的 IDE 甚至是一些高级文本编辑器,在你用鼠标点击到变量名称上时,就能显示变量的类型),它已经过时了。

一套可行的命名规范:

1)类名、枚举名、结构名、联合名、typedef 定义的类型名、函数名可以使用 LikeThis 的命名方式。

2)变量名使用诸如 likeThis 的命名方式(首字母小写)

3)类成员变量名前加 m_ 例如:

class User

{

    int m_id;

}

全局变量前加 g_ 例如:

int g_id;

静态变量使用 s_ 例如:

static int s_id;

这里说明一下,为什么需要把作用域和链接性信息融入名称中:

<1>变量作用域和链接性改变的情况是很少的,例如,很少的情况下会把一个成员变量改成静态变量

<2>编程中使用的工具常常不会直观的显示变量的作用域和链接性

<3>在许多高质量的代码中,均不同程度的将作用域信息融入变量名称中(通常使用 "_" 来表明其作用域)

对于静态类成员变量,通常使用如下方式表示:

template <typename T>

class Singleton

{

protected:

    static T* ms_instance; // 作用域前于链接性

}

4)宏和常量使用 LIKE_THIS 的命名方式

5)namespace 使用小写字母命名

6)接口使用 ILikeThis 的命名方式

分享到