Microsoft公司的匈牙利法命名规则

Microsoft公司的"匈牙利"法命名规则

比较著名的命名规则当推Microsoft公司的"匈牙利"法,该命名规则的主要思想是"在变量和函数名中加入前缀以增进人们对程序的理解"。例如所有的字符变量均以ch为前缀,若是指针变量则追加前缀p。如果一个变量由ppch开头,则表明它是指向字符指针的指针。
"匈牙利"法最大的缺点是烦琐,例如
int i, j, k;
float x, y, z;
倘若采用"匈牙利"命名规则,则应当写成
int iI, iJ, ik; // 前缀 i表示int类型
float fX, fY, fZ; // 前缀 f表示float类型
如此烦琐的程序会让绝大多数程序员无法忍受。
据考察,没有一种命名规则可以让所有的程序员赞同,程序设计教科书一般都不指定命名规则。命名规则对软件产品而言并不是"成败悠关"的事,我们不要化太多精力试图发明世界上最好的命名规则,而应当制定一种令大多数项目成员满意的命名规则,并在项目中贯彻实施。
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】用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。
例如:
intminValue;
intmaxValue;

intSetValue(…);
intGetValue(…);

2【建议3-1-1】尽量避免名字中出现数字编号,如Value1,Value2等,除非逻辑上的确需要编号。这是为了防止程序员偷懒,不肯为命名动脑筋而导

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开头。 的主要思想是"在变量和函数名中加入前缀以增进人们对程序的理解"。例如所有的字符变量均以ch为前缀,若是指针变量则追加前缀p。如果一个变量由ppch开头,则表明它是指向字符指针的指针。
"匈牙利"法最大的缺点是烦琐,例如
int i, j, k;
float x, y, z;
倘若采用"匈牙利"命名规则,则应当写成
int iI, iJ, ik; // 前缀 i表示int类型
float fX, fY, fZ; // 前缀 f表示float类型
如此烦琐的程序会让绝大多数程序员无法忍受。
据考察,没有一种命名规则可以让所有的程序员赞同,程序设计教科书一般都不指定命名规则。命名规则对软件产品而言并不是"成败悠关"的事,我们不要化太多精力试图发明世界上最好的命名规则,而应当制定一种令大多数项目成员满意的命名规则,并在项目中贯彻实施。
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】用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。
例如:
intminValue;
intmaxValue;

intSetValue(…);
intGetValue(…);

2【建议3-1-1】尽量避免名字中出现数字编号,如Value1,Value2等,除非逻辑上的确需要编号。这是为了防止程序员偷懒,不肯为命名动脑筋而导

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开头。

时间: 2024-11-05 19:41:32

Microsoft公司的匈牙利法命名规则的相关文章

高质量C++/C编程指南-第3章-命名规则(1)

第3章 命名规则比较著名的命名规则当推Microsoft公司的"匈牙利"法,该命名规则的主要思想是"在变量和函数名中加入前缀以增进人们对程序的理解".例如所有的字符变量均以ch为前缀,若是指针变量则追加前缀p.如果一个变量由ppch开头,则表明它是指向字符指针的指针. "匈牙利"法最大的缺点是烦琐,例如 int i, j, k; float x, y, z; 倘若采用"匈牙利"命名规则,则应当写成 int iI, iJ, ik

CSS规范化命名的重要性及三种通用命名规则

css|规范|规范化 我们在webjx.com以前的文章中,曾经多次提到CSS命名的问题,有些朋友依然不够重视这些问题.认为这个问题对于CSS网页布局开发是无关紧要的.自己写的样式,自己心中有数就可以了.想要修改样式可以根据自己的记忆或个人的编码习惯很快的找到样式定义在文件中的位置.下面是我们以前介绍的关于CSS命名的文章: 但是,如果我们过几个月,过几年再修改现在所编写的文章,你的记忆还会那么清晰吗?如果你的个人习惯仅是一时的规则,长时间以后,或许对你自己来说,那些奇怪的名字也变的难以理解了.

详细讲解CSS规范化命名的三种通用命名规则

css|规范|规范化 我们在webjx.com以前的文章中,曾经多次提到CSS命名的问题,有些朋友依然不够重视这些问题.认为这个问题对于CSS网页布局开发是无关紧要的.自己写的样式,自己心中有数就可以了.想要修改样式可以根据自己的记忆或个人的编码习惯很快的找到样式定义在文件中的位置.下面是我们以前介绍的关于CSS命名的文章: 但是,如果我们过几个月,过几年再修改现在所编写的文章,你的记忆还会那么清晰吗?如果你的个人习惯仅是一时的规则,长时间以后,或许对你自己来说,那些奇怪的名字也变的难以理解了.

关于命名规则的一些想法

变量命名和代码约定在项目中往往是一个比较难处理的议题,程序员倾向于使用其个人的命名约定,而不喜欢别人规定他们如何编写代码. 然而,当代码需要为团队内的其他成员阅读时(特别是代码检查的时候),拥有通用的命名约定是很有价值的,拥有通用的命名约定也便于自己日后再阅读自己的代码.这中体会在几次项目以后,体会更加深刻.所以才有想要统一团队命名规则的想法. 一直以来,最流行的变量命名约定是所谓的匈牙利表示法(Hungarian Notation).最初由Microsoft的Charles Simonyi提出

C#中的命名规则与编码规范

编码|规范 一.匈牙利命名法:       Windows 编程中用到的变量(还包括宏)的命名规则匈牙利命名法,这种命名技术是由一位能干的 Microsoft 程序员查尔斯·西蒙尼(Charles Simonyi) 提出的.匈牙利命名法通过在变量名前面加上相应的小写字母的符号标识作为前缀,标识出变量的作用域,类型等.这些符号可以多个同时使用,顺序是先m_(成员变量),再指针,再简单数据类型,再其他.例如:m_lpszStr, 表示指向一个以0字符结尾的字符串的长指针成员变量.     匈牙利命名

.net官方编码方法和命名规则

编码 Visual Studio  编码方法 编码方法合并了软件开发的许多方面.尽管它们通常对应用程序的功能没有影响,但它们对于改善对源代码的理解是有帮助的.这里考虑了所有形式的源代码,包括编程.脚本撰写.标记和查询语言. 不建议将这里定义的编码方法形成一套固定的编码标准.相反,它们旨在作为开发特定软件项目的编码标准的指南. 编码方法分为三部分: 命名 注释 格式 命名 对于理解应用程序的逻辑流,命名方案是最有影响力的一种帮助.名称应该说明"什么"而不是"如何".通

计算机病毒的命名规则详解

很多时候大家已经用杀毒软件查出了自己的机子中了例如Backdoor. RmtBomb.12 .Trojan.Win32.SendIP.15 等等这些一串英文还带数字的病毒名,这时有些人就懵了,那么长一串的名字,怎么知道是什么病毒啊? 其实只要掌握一些病毒的命名规则,就能通过杀毒软件的报告中出现的病毒名来判断该病毒的一些公有的特性了. 世界上那么多的病毒,反病毒公司为了方便管理,他们会按照病毒的特性,将病毒进行分类命名.虽然每个反病毒公司的命名规则都不太一样,但大体都是采用一个统一的命名方法来命名

关于病毒命名规则的说明

很多时候大家已经用杀毒软件查出了自己的机子中了例如Backdoor. RmtBomb.12 .Trojan.Win32.SendIP.15 等等这些一串英文还带数字的病毒名,这时有些人就懵了,那么长一串的名字,我怎么知道是什么病毒啊? 其实只要我们掌握一些病毒的命名规则,我们就能通过杀毒软件的报告中出现的病毒名来判断该病毒的一些公有的特性了. 世界上那么多的病毒,反病毒公司为了方便管理,他们会按照病毒的特性,将病毒进行分类命名.虽然每个反病毒公司的命名规则都不太一样,但大体都是采用一个统一的命名

华为H3C交换机路由器命名规则详解

  一.设备版本规则 LI(Lite software Image)表示设备为弱特性版本. SI(Standard software Image)表示设备为标准版本,包含基础特性. EI(Enhanced software Image)表示设备为增强版本,包含某些高级特性. HI(Hyper software Image)表示设备为高级版本,包含某些更高级特性. PWR 表示设备为支持远程以太网供电,供电符合802.3AF标准. 二.性能命名规则 Quidway SA1 A2 A3 A4 A5-