• 读书笔记 匈牙利符号表示法


    摘自《WIndows游戏编程大师技巧》第二章

    匈牙利符号表示法

        如果你正在动作一个像Microsoft一样的公司,有几千个程序员都在干不同的项目
    ,在某一点上就应当提出一个编写代码的标准方式。否则,结果将是一片混乱。因此一个
    名字叫Charles Simonyi的人被委托创立了一套编写Microsoft代码的规范。这个规范已经
    用作编写代码的基本指导说明书。所有Microsoft的API、界面、技术文件等等都采用这些
    规范。
      这个规范通常被称为匈牙利符号表示法,可能是因为创立这个规范工作很长时间,弄
    得他饥肠辘辘的原因吧(英文中饥饿和匈牙利谐音),或者可能他是匈牙利人。对我们根本
    不知道,关键是你必须了解这个规范,以便于你能够阅读Microsoft代码。匈牙利符号表示
    法包括许多与下列命名有关的约定:
      ·变量
      ·函数
      ·类型和常量
      ·类
      ·参数
      表2.1给出了匈牙利符号表示法使用的前缀代码。这些代码在大多数情况下一半用于前
    缀变量名,其他约定根据名称确定。其他解释可以参考本表。

         表2.1 匈牙利符号表示法的前缀代码指导说明书
      ━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━
      前缀    │数据类型(基本类型)
      ──────┼────────────────────────
      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   │消息
      ──────┴───────────────────────

    变量的命名

      应用匈牙利符号表示法,变量可用表2.1中的前缀代码来表示。另外,当一个变量是由
    一个或几个子名构成时,每一个子名都要以大写字母开头。下面是几个例子:
      char *szFileName;//a nulla terminated string
      int *lpiDate;//a 32-bit pointer to an int
      BOOL bSemaphore;//a boolean value
      WORD dwMaxCount;//a 32-bit unsigned WORD
      尽管我了解一个函数的局部变量没有说明,但是也有个别表示全局变量:
      int g_iXPos;//a global x-position
      int g_iTimer;//a global y-position
      char *g_szString;//a global NULL terminated string
      总的来说,变量以g_开头,或者有时就只用g。

    函数的命名

      函数和变量命名方式相同,但是没有前缀。换句话说,子名的第一个字母要大写。下
    面是几个例子:
      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
      这儿并没有什么不同的地方——非常标准的定义。尽管大多数Microsoft程序员不使用
    下划线,但我还是喜欢用,因为这样能使名字更具有可读性。

      C++ 在C++中,关键字const不止一个意思。在前面的代码行中,它用来创建一个常
    数变量。这和#define相似,但是它增加了类型信息这个特性,const不仅仅像#define一样
    是一个简单的预处理文本替换,而且更像是一个变量,它允许编译器进行类型检查和替换

    类的命名

      类命名的约定可能要麻烦一点。但我也看到有很多人在使用这个约定,并独立地进行
    补充。不管怎样说,所有C++的类必须以大写C为前缀,类名字的每一个子名的第一个字母
    都必须大写。下面是几个例子:
      class CVector
      {
       public
       CVector();{ix=iy=yz=imagnitude = 0;}
       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);
      但我认为这并没有什么两样。
      最后,你甚至可能都看不到这些变量名,而仅仅看到类型,如下所示:
      UCHAR GetPixel(int, int);
      当然,这仅仅是原型使用的,真正的函数声明必须带有可赋值的变量名,这一点你已
    经掌握了。
      注意:仅仅会读匈牙利符号表示并不代表你能使用它。实际上,我进行编程工作已经
    有20多年了,我也不准备为谁改变我的编程风格。因此,本书中的代码使用类匈牙利符号
    表示法的编码风格,这是Win32 API造成的,在其他位置将使用我自己的风格,必须注意的
    是,我使用的变量名的第一个字母没有大写,并且我还使用下划线。

  • 相关阅读:
    微服务之初识微服务
    常见的认证机制及JSON WEB TOKEN
    深入理解缓存之缓存预热与淘汰策略
    深入理解缓存之缓存和数据库的一致性
    深入理解缓存之缓存存在的问题及应对措施
    深入理解缓存之常见的缓存算法
    计算机网络之HTTP、HTTPS、HTTP2
    计算机网络之TCP(三次握手、四次挥手等),UDP及DNS
    计算机网络之网络体系架构与IP
    深入理解MyBatis(四)--缓存
  • 原文地址:https://www.cnblogs.com/oneDouble/p/2366450.html
Copyright © 2020-2023  润新知