C语言命名规则
匈牙利命名法是微软推广的一种关于变量、函数、对象、前缀、宏定义等各种类型的符号的 命名规范。匈牙利命名法的主要思想是:在变量和函数名中加入前缀以增进人们对程序的理 解。它是由微软内部的一个匈牙利人发起使用的,结果它在微软内部逐渐流行起来,并且推
广给了全世界的Windows开发人员。下面将介绍匈牙利命名法,后面的例子里也会尽量遵守
它和上面的代码风格。
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 (usually multiple bit values) 标志(一般是有多位的数值)
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 符串
tm Text metric
u Unsigned int
ul Unsigned long (ULONG) 整数 长整数 长指针 一个类的数据短整数 指针 字符串 以0结尾的字文本规则 无符号整数 无符号长整数
w WORD (unsigned short) 无符号短整数
x,y x, y coordinates (short) 坐标值/短整数
v void 空
有关项目的全局变量用g_开始,类成员变量用m_,局部变量若函数较大则可考虑用l_用以
显示说明其是局部变量。
前缀 类型 例子
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位字符串指针 lpszName
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
Microsoft MFC宏命名规范
名称 类型
_AFXDLL 唯一的动态连接库(Dynamic Link Library,DLL)版本
_ALPHA 仅编译DEC Alpha处理器
_DEBUG 包括诊断的调试版本
_MBCS 编译多字节字符集
_UNICODE 在一个应用程序中打开Unicode
AFXAPI MFC提供的函数
CALLBACK 通过指针回调的函数
库标识符命名法
标识符 值和含义
u ANSI(N)或Unicode(U)
d 调试或发行:D = 调试;忽略标识符为发行
静态库版本命名规范
库 描述
NAFXCWD.LIB 调试版本:MFC静态连接库
NAFXCW.LIB 发行版本:MFC静态连接库
UAFXCWD.LIB 调试版本:具有Unicode支持的MFC静态连接库
UAFXCW.LIB 发行版本:具有Unicode支持的MFC静态连接库
动态连接库命名规范
名称 类型
_AFXDLL 唯一的动态连接库(DLL)版本
WINAPI Windows所提供的函数
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
MSDN中给出了一段遵守代码风格和匈牙利命名法的代码参考如下: 1 #include “sy.h”
2 extern int *rgwDic; 3 extern int bsyMac;
4 struct SY *PsySz(char sz[]) 6 {
7 char *pch; 8 int cch;
9 struct SY *psy, *PsyCreate(); 10 int *pbsy; 11 int cwSz;
12 unsigned wHash=0; 13 pch=sz;
14 while (*pch!=0)
15 wHash=wHash11+*pch++; 16 cch=pch-sz;
17 pbsy=&rgbsyHash[(wHash&077777)%cwHash]; 18 for (; *pbsy!=0; pbsy = &psy->bsyNext) 19 {
20 char *szSy;
21 szSy= (psy=(struct SY*)&rgwDic[*pbsy])->sz; 22 pch=sz;
23 while (*pch==*szSy++) 24 {
25 if (*pch++==0) 26 return (psy); 27 } 28 }
29 cwSz=0;
30 if (cch>=2)
31 cwSz=cch-2/sizeof(int)+1;
32 *pbsy=(int *)(psy=PsyCreate(cwSY+cwSz))-rgwDic; 33 Zero((int *)psy,cwSY);
34 bltbyte(sz, psy->sz, cch+1); 35 return(psy); 36 }
按照MS方式编程:匈牙利符号表示法
匈牙利符号表示法包括许多与下列命名有关的约定:
(1)变量
(2)函数
(3)类型和常量
(4)类
(5)参数
匈牙利符号表示法的前缀代码指导说明书:
**************************************************************************
前缀 数据类型(基本类型)
C 字符
BY 字节
N 短整数和整数(表示一个数)
I 整数
X,Y 短整数(通常用于X坐标和Y坐标) CX,CY 短整数(通常用于表示X和Y的长度,C表示计数)
B 布尔型
W UINT(无符号数)和WORD(无符号字) L LONG(长整数)
DW DWORD(无符号长整数)
FN 函数指针
S 串
SZ,STR 以0字节终止的字符串
LP 32位长整数指针
H 编号(常用于表示Windows对象) MSG 消息
**************************************************************************
变量的命名:
应用匈牙利表示法,变量可用上表中的前缀代码来表示。另外,当一个变量是由一个或几个子名构成时
,每一个子名都要以大写字母开头。下
面是几个例子:
char *szfileName; // a nulla terminated string:以0终止的字符串
int *lpidate; // a 32-bit pointer to an int:指向一个整型变量的32位
的长指针
Bool,bSemaphore; //a boolean value
WORD dwMaxCount // a 32-bit unsigned WORD
尽管我们了解一个函数的局部变量没有说明,但是也有个别表示全局变量必须要以 g_ 开头:
int g_iXPos; // a global x-position
int g_iTimer; // a global y-position
char *g_szString //a global NULL terminated string
函数的命名:
函数和变量的命名方式相同,但是没有前缀,换句话说,子名的第一个字母要大写。下面是几个例子:
int PlotPixel(int ix,int iy,int ic);
void *MemScan(char *szString);
而且,下划线是非法的。例如,下面的函数名表示是无效的匈牙利表示法: int Get_Pixel(int ix,int iy);
类型和常量的命名:
所有的类型和常量都是大写字母,但名字中可以允许有下划线。如: const LONG NUM_SECTORS=100; // a C++ style constant #define MAX_CELLS 64; // a C style constant
#define POWERUNIT 100; // a C style constant
typedef unsigned char UCHAR; // a user defined type
类的命名
类命名的约定可能要麻烦一点。但我也看到有很多人在使用这个约定,并独立地进行补充。不管怎么说
,所有C++的类必须以大写C为前缀,类
名字的每一个子名的第一个字母都必须大写:
class CVector // the chinese mean of vector is 矢量
{
public
CVector();
{ix=iy=iz=imagnitude=0;} //the chinese mean of magnitude is 大小 CVector(int x, int y, int z)
{ix=x;iy=y;iz=z;}
......
private:
int ix,iy,iz;//the position of the vector
int imagnitude; //the magnitude of the vector
......
}
参数的命名
函数的参数命名和标准变量命名的约定相同。但也不总是如此。如: UCHAR GetPixel(int x,int y);
这种情况下,更准确的匈牙利的函数原型是:
UCHAR GetPixel(int ix,int iy);
MFC、句柄、控件及结构的命名规范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 hPaltte; CPalette* pPalette;
HRGN hRgn; CRgn* pRgn;
HMENU hMenu; CMenu* pMenu;
HWND hCtl; CState* pState;
HWND hCtl; CButton* pButton;
HWND hCtl; CEdit* pEdit;
HWND hCtl; CListBox* pListBox;
HWND hCtl; CComboBox* pComboBox;
HWND hCtl; CScrollBar* pScrollBar;
HSZ hszStr; CString pStr;
POINT pt; CPoint pt;
SIZE size; CSize size;
RECT rect; CRect rect;
一般前缀命名规范前缀 类型 实例
C 类或结构 CDocument,CPrintInfo
m_ 成员变量 m_pDoc,m_nCustomers
--------------------------------------------------------------------------------
变量命名规范 前缀 类型 描述 实例
ch char 8位字符 chGrade
ch TCHAR 如果_UNICODE定义,则为16位字符 chName
b BOOL 布尔值 bEnable
n int 整型(其大小依赖于操作系统) nLength
n UINT 无符号值(其大小依赖于操作系统) nHeight w WORD 16位无符号值 wPos
l LONG 32位有符号整型 lOffset
5 常用缩写词
原词 缩写
addition add
answer ans
array arr
average avg
buffer buf或buff
capture cap或capt
check chk
count cnt
column col
control ctrl
decode dec
define def
delete del
destination dst或dest
display disp
division div
encode enc
environment env
error err
float flt
frequency freq
header hdr
index idx
image img
increment inc
initalize init
iteration itr
length len
memory mem
middle mid
make mk
message msg
multiplication mul
number num
operand opnd
optimization opt
operator optr
packet pkt
positon pos
previous pre或prev
payload type pt
pointer ptr
return code rc
record rcd
receive recv
result res
return ret
source src
stack stk
string str
subtraction sub
table tab
temporary tmp或temp
total tot
time stamp ts
value val
本文来自CSDN博客,转载请标http://blog.csdn.net/AlfredLu/archive/2007/03/02/1519086.aspx 出处:明