zoukankan      html  css  js  c++  java
  • 匈牙利命名法

    匈牙利命名法

    来源 https://www.cnblogs.com/mengfanrong/p/3854277.html

            变量(还包含宏)的命名规则,比較系统和彻底的有 Windows 编程中用到的匈牙利命名法。匈牙利命名法通过在变量名前面加上对应的小写字母的符号标识作为前缀,标识出变量的作用域,类型等。这些符号能够多个同一时候使用,顺序是先m_(成员变量),再指针,再简单数据类型,再其它。比如:m_lpszStr, 表示指向一个以0字符结尾的字符串的长指针成员变量。
    有关匈牙利命名法的一点有意思的说明是它的名字的由来。这样的命名技术是由一位能干的 Microsoft 程序猿查尔斯·西蒙尼(Charles Simonyi) 提出的,他出生在匈牙利。在 Microsoft 公司中和他一起工作的人被教会使用这样的约定。这对他们来说一切都非常正常。但对那些 Simonyi领导的项目组之外的人来说却感到非常奇特,他们觉得这是死板的表达方式,甚至说代有这样奇怪的外观是由于它是用匈牙利文写的。从此这样的命名方式就被叫做匈牙利命名法。匈牙利命名法关键是:标识符的名字以一个或者多个小写字母开头作为前缀;前缀之后的是首字母大写的一个单词或多个单词组合,该单词要指明变量的用途。
    匈牙利命名法中经常使用的小写字母的前缀
    前  缀
    类  型
    a
    数组 (Array)
    b
    布尔值 (Boolean)
    by
    字节 (Byte)
    c
    有符号字符 (Char)
    cb
    无符号字符 (Char Byte,没有多少人用)
    cr
    颜色參考值 (ColorRef)
    cx,cy
    坐标差(长度 ShortInt)
    dw
    Double Word
    fn
    函数
    h
    Handle
    i
    整型
    l
    长整型 (Long Int)
    lp
    Long Pointer
    m_
    类的成员
    n
    短整型 (Short Int)
    np
    Near Pointer
    p
    Pointer
    s
    字符串型
    sz
    以null做结尾的字符串型 (String with Zero End)
    w
    Word
    可是在不论什么情况下,都硬性规定使用匈牙利命名法是迂腐的。尤其是 Unix 编程,在使用没有变量名、keyword自己主动补齐功能的编辑器,如 vi 下,去敲入大写和小写混合的变量名是痛苦的。事实上仅仅要注意两个原则:1) 含义清晰,不易混淆; 2) 不和其他模块、系统API的命名空间相冲突就可以。
    1.有意识的为变量名、宏名加上本模块的keyword,就不至于和其他模块、系统API的命名空间相冲突;比如: 宏的名称过短,如:DEBUG; 或_DEBUG,非常可能和别的模块,系统模块相冲突;
    2.局部变量尤其是循环变量外,使用约定俗成的 i,j,k ,没有问题;
    3.宏、常量、枚举enum,所实用大写字母;
    4.全局变量加上前缀 "g",后面跟上首字母大写的单词;
    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
    dw
    DWORD
    32位无符号整型
    dwRange
    p
    *
    指针
    pDoc
    lp
    FAR*
    远指针
    lpszName
    lpsz
    LPSTR
    32位字符串指针
    lpszName
    lpsz
    LPCSTR
    32位常量字符串指针
    lpszName
    lpsz
    LPCTSTR
    假设_UNICODE定义,则为32位常量字符串指针
    lpszName
    h
    handle
    Windows对象句柄
    hWnd
    lpfn
    callback
    指向CALLBACK函数的远指针
     
    应用程序符号命名规范
    前缀
    符号类型
    实例
    范围
    IDR_
    不同类型的多个资源共享标识
    IDR_MAIINFRAME
    1~0x6FFF
    IDD_
    对话框资源
    IDD_SPELL_CHECK
    1~0x6FFF
    HIDD_
    对话框资源的Help上下文
    HIDD_SPELL_CHECK
    0x20001~0x26FF
    IDB_
    位图资源
    IDB_COMPANY_LOGO
    1~0x6FFF
    IDC_
    光标资源
    IDC_PENCIL
    1~0x6FFF
    IDI_
    图标资源
    IDI_NOTEPAD
    1~0x6FFF
    ID_
    来自菜单项或工具栏的命令
    ID_TOOLS_SPELLING
    0x8000~0xDFFF
    HID_
    命令Help上下文
    HID_TOOLS_SPELLING
    0x18000~0x1DFFF
    IDP_
    消息框提示
    IDP_INVALID_PARTNO
    8~0xDEEF
    HIDP_
    消息框Help上下文
    HIDP_INVALID_PARTNO
    0x30008~0x3DEFF
    IDS_
    串资源
    IDS_COPYRIGHT
    1~0x7EEF
    IDC_
    对话框内的控件
    IDC_RECALC
    8~0xDEEF
    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
    ====================== End
  • 相关阅读:
    Today
    react-decorator-track 解耦-埋点方案
    Decorator
    webpack4强势来袭
    同源策略与跨域处理
    html语义化
    深度遍历与广度遍历的理解
    Javascript 模块化理解
    算法之排序
    数组去重
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/9687538.html
Copyright © 2011-2022 走看看