C++命名约定

转载 2007年09月22日 23:08:00
  
命名约定
本书采用的命名约定和Microsoft所使用的“匈牙利式”命名约定差不多。该约定是由生于匈牙利布达佩斯的Charles Simonyi开发的,它通过在数据和函数名中加入额外的信息以增进程序员对程序的理解。例如:
char ch;            /* 所有的字符变量均以ch开始    */
byte b;             /* 所有的字节均冠以b    */
long l;             /* 所有的长字均冠以l    */
对于指向某个数据类型的指针,可以先象上面那样建立一个有类型的名字,然后给该名字加上前缀字母P:
char* pch;          /* 指向ch的指针以p开始 */
byte* pb;           /* 同理 */
long* pl;
void* pv;           /* 特意显用的空指针 */
char** ppch;        /* 指向字符指针的指针 */
byte** ppb;         /* 指向字节指针的指针 */
匈牙利式名字通常不那么好念,但在代码中读到它们时,确实可以从中得到许多的信息。例如,当你眼看到某个函数里有一个名为pch的变量时,不用查看声明就立即知道它是一个指向字符的指针。
为了使匈牙利式名字的描述性更强.或者要区分两个变量名,可以在相应类型派生出的基本名字之后加上一个以大写字母开头的“标签”。例如,strcpy函数有两个字符指针参数:一个是源指针,另一个是目的指针。使用匈牙利式命名约定,其相应的原型是:
char* strcpy(char* pchTo, char* pchFrom);       /* 原型 */
在上面的例子中,两个字符指针有一个共同的特点 ── 都指向以0为结尾的C的字符串。因此在本书中,每当用字符指针指向字符串时,我们就用一个更有意义的名子str来表示。因此,上述strcpy的原型则为:
char* strcpy(char* strTo, char* strFrom)            /* 原型 */
本书用到另一个类型是ANSI标准中的类型size_t。下面给出该类型的一些典型用法:
size_t sizeNew, sizeOld;                            /* 原型 */
void* malloc(size_t size);                          /* 原型 */
void* realloc(void* pv, size_t sizeNew);            /* 原型 */
函数和数组的命名遵循同样的约定,名字由相应的返回类型名开始,后跟一个描述的标签。例如:
ch = chLastKeyPressed;                  /* 由变量得一字符 */
ch = chInputBuffer[];                   /* 由数组得一字符 */
ch = chReadKeyboard;                    /* 由函数得一字符 */
如果利用匈牙利式命名方法,mall~和reali~可以写成如下形式:
void* pvNewBlock(size_t size);                      /* 原型 */
void* pvResizeBlock(void* pv, size_t sizeNew);      /* 原型 */
由于匈牙利式命名方法旨在增进程序员对程序的理解,所以大多数匈牙利式名字的长度都要超过ANSI严格规定6个字母的限制。这就不妙,除非所用的系统是几十年前设计的系统,否则这6个字母的限制只当是历史的遗迹。
以上内容基本上没有涉及到匈牙利式命名约定的细节,所介绍的都是读者理解本书中所用变量和函数名称意义的必需内容。如果读者对匈牙利式命名约定的详细内容感兴趣,可以参考本书末尾参考文献部分列出的Simonyi的博士论文。

相关文章推荐

C++编码规范------命名约定

命名约定通用命名约定 类型名必须混合大小写且以大写开始。 变量名必须混合大小写且以小写开始。 常量(含枚举值)的命名必须全部为大写,以下划线分隔单词。 方法与函数的命名必须是动作性的,采用大小写混合的...

我要精通C++——Google C++编程风格指南之命名约定

欢迎关注我的微博点击打开链接       此命名规则参照Google C++ 编程风格指南,虽然说规则是死的,但是按照规则总归可以提高代码的可读性,使代码共享起来更方便,对于提高个人的编码能力有不小...

[C++] 编程实践之1: Google的C++代码风格6:命名约定

6. 命名约定 6.1 通用命名规则 6.2 文件命名 6.3 类型命名 6.4 变量命名 6.5 常量命名 6.6 函数命名 6.7 名字空间命名 6...

C++函数调用约定

  • 2015年06月15日 18:36
  • 2KB
  • 下载

calling_conventions C++调用约定

  • 2015年01月24日 18:46
  • 495KB
  • 下载

C/C++ 函数调用约定(__cdecl、__stdcall、__fastcall)

调用函数时,计算机常用栈来存放函数执行需要的参数,由于栈的空间大小是有限的,在windows下,栈是向低地址扩展的数据结构,是一块连续的内存区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好...

C++成员函数 this指针 调用约定

摘要:介绍了如何取成员函数的地址以及调用该地址. 关键字:C++成员函数 this指针 调用约定 一、成员函数指针的用法   在C++中,成员函数的指针是个比较特殊的东西。对普通的函数指针来说,可以视...

有效的使用和设计COM智能指针——条款17:重载运算符时应当符合C/C++约定

条款17:重载运算符时应当符合C/C++约定 更多条款请前往原文出处:http://blog.csdn.net/liuchang5 假设我们用了第三方的stack模版类,他的pop函数...

C++愤恨者札记3——函数调用约定

C++愤恨者札记3——函数调用约定     函数调用约定指的是,参数压栈顺序及弹栈位置的约定。这个约定在函数声明时指定,如:  void __stdcall Fn(int arg1,  int...
  • tms_li
  • tms_li
  • 2012年07月22日 00:20
  • 1288
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++命名约定
举报原因:
原因补充:

(最多只允许输入30个字)