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

    变量(还包含宏)的命名规则,比較系统和彻底的有 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
    类或结构
    CDocumentCPrintInfo
    m_
    成员变量
    m_pDocm_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
    10x6FFF
    IDD_
    对话框资源
    IDD_SPELL_CHECK
    10x6FFF
    HIDD_
    对话框资源的Help上下文
    HIDD_SPELL_CHECK
    0x200010x26FF
    IDB_
    位图资源
    IDB_COMPANY_LOGO
    10x6FFF
    IDC_
    光标资源
    IDC_PENCIL
    10x6FFF
    IDI_
    图标资源
    IDI_NOTEPAD
    10x6FFF
    ID_
    来自菜单项或工具栏的命令
    ID_TOOLS_SPELLING
    0x80000xDFFF
    HID_
    命令Help上下文
    HID_TOOLS_SPELLING
    0x180000x1DFFF
    IDP_
    消息框提示
    IDP_INVALID_PARTNO
    80xDEEF
    HIDP_
    消息框Help上下文
    HIDP_INVALID_PARTNO
    0x300080x3DEFF
    IDS_
    串资源
    IDS_COPYRIGHT
    10x7EEF
    IDC_
    对话框内的控件
    IDC_RECALC
    80xDEEF

    Microsoft MFC宏命名规范

    名称
    类型
    _AFXDLL
    唯一的动态连接库(Dynamic Link LibraryDLL)版本号
    _ALPHA
    仅编译DEC Alpha处理器
    _DEBUG
    包含诊断的调试版本号
    _MBCS
    编译多字节字符集
    _UNICODE
    在一个应用程序中打开Unicode
    AFXAPI
    MFC提供的函数
    CALLBACK
    通过指针回调的函数

    库标识符命名法

    标识符
    值和含义
    u
    ANSIN)或UnicodeU
    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 NTWindows 9x32位);它是unsigned int的同义词
    LRESULT
    窗体程序返回值的类型
    LPARAM
    声明lParam所使用的类型,lParam是窗体程序的第四个參数
    WPARAM
    声明wParam所使用的类型,wParam是窗体程序的第三个參数
    LPVOID
    一般指针类型,与(void *)同样,能够用来取代LPSTR

     
  • 相关阅读:
    Java Web总结一反射、单例模式
    Android中Log的管理
    改进边的导航
    当前效果
    understand一些功能
    maya 专家模式
    改进的共轭梯度法
    selenium TestNG 依赖和忽略测试
    selenium TestNG基本注释和属性
    JAVA 批量执行测试用例
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4218519.html
Copyright © 2011-2022 走看看