由于匈牙利风格信息冗余,并与编码规范的其它条款冲突,所以它的存在仅限于VC中。
下面是它的命名部分规则:
1. 类的命名 C+首字母大写的单词组合,通常是名字性短语,一般不含下划线
如CMyClass
2 函数(类成员函数) 首字母大写的单词组合,通常是动宾结构的短语一般不含下划线
如 GetName(), PostMessage(),SaveProfile()等
3 成员变量 m_开头,小写的类型标记标记+首字母大写的单词组合,通常是名字性短语
其中,小写的类型标记,DWORD简写为dw,int 记为 i, usigned int记为u或n,HANDLE记为h,Window记为wnd, 以0结尾的字符串记为sz,CString记为str
如 m_szName, m_strName,m_nAge
4. 全局变量同成员变量,只是将m_改为g_
5. 静态变量同成员变量,只是将m_改为s_
6. 参数, 同成员变量,只是去掉m_,无前缀 如SaveProfile(NewProfile)
7. 指针,通常是与变量前叫p表示,指向指针的指针则是pp开头
匈牙利命名法 按照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)