匈牙利命名規範

 

     幾年以前,Charles Simonyi(他後來成爲微軟的著名程序員)設計了一種以前綴爲基礎的命名方法,這種方法後來稱爲"匈牙利表示法"以記念他.他的思想是根據每個標識符所代表的含義給它一個前綴.微軟後來採用了這個思想,給每個標識符一個前綴以說明它的數據類型.因此,整型變量的前綴是n,長整型變量是nl,字符型數組變量是ca,以及字符串(以空類型結尾的字符數組)sz爲前綴.這些名字可能會非常古怪.比如說:lpszFoo表示"Foo"是一個指向以空字符爲結尾的字符串的長整型指針.

    這種方法的優點是使人能夠通過變量的名字來辨別變量的類型,而不比去查找它的定義.遺憾的是,這種方法不僅使變量名字非常繞口,而且使改變變量類型的工作變得十分艱鉅.Windows3.1,整型變量爲16爲寬.如果我們在開始時採用了一個整型變量,但是在通過30---40個函數的計算之後,發現採用整型變量寬度不夠,這時我們不僅要改變這個變量的類型,而且要改變這個變量在這30--40個函數中的名字.

    匈牙利命名法是微軟推廣的一種關於變量、函數、對象、前綴、宏定義等各種類型的符號的命名規範。匈牙利命名法的主要思想是:在變量和函數名中加入前綴以增進人們對程序的理解。它是由微軟內部的一個匈牙利人發起使用的,結果它在微軟內部逐漸流行起來,並且推廣給了全世界的Windows開發人員。下面將介紹匈牙利命名法,後面的例子裏也會盡量遵守它和上面的代碼風格。還是那句話,並不是要求所有的讀者都要去遵守,但是希望讀者作爲一個現代的軟件開發人員都去遵守它。

a       Array                                 數組
b       BOOL (int)                            
布爾(整數)
by      Unsigned Char (Byte)                  
無符號字符(字節
)
c       Char                                  
字符(字節
)
cb      Count of bytes                        
字節數

cr      Color reference value                 
顏色(參考)
cx      Count of x (Short)                    x
的集合(短整數)
dw      DWORD (unsigned long)                 
雙字(無符號長整數
)
f       Flags (usually multiple bit values)   
標誌(一般是有多位的數值
)
fn      Function                              
函數

g_      global                                
全局的
h       Handle                                
句柄
i       Integer                               
整數
l       Long                                  
長整數
lp      Long pointer                          
長指針
m_      Data member of a class                
一個類的數據成員
n       Short int                             
短整數
p       Pointer                               
指針
s       String                                
字符串
sz      Zero terminated String                
0結尾的字符串
tm      Text metric                           
文本規則
u       Unsigned int                          
無符號整數
ul      Unsigned long (ULONG)                 
無符號長整數
w       WORD (unsigned short)                 
無符號短整數
x,y     x, y coordinates (short)              
座標值/短整數
v       void                                  

有關項目的全局變量用g_開始,類成員變量用m_,局部變量若函數較大則可考慮用l_用以顯示說明其是局部變量。

前綴    類型               例子
g_      
全局變量           g_Servers
C       
類或者結構體       CDocument
CPrintInfo
m_      
成員變量           m_pDocm_nCustomers

VC常用前綴列表:

前綴    類型    描述例子
ch      char    8
位字符 chGrade
ch      TCHAR   16
Unicode集字符
 chName
b       BOOL    
布爾變量
 bEnable
n       int     
整型
 nLength
n       UINT    
無符整型
 nLength
w       WORD    16
位無符號整型
 wPos
l       Long    32
位有符號整型
 lOffset
dw      DWORD   32
位無符號整型
 dwRange
p       *       
指針變量,內存模塊指針(
Ambient memory model point) pDoc
lp      Far*    
長指針
 lpDoc
lpsz    LPSTR   32
位字符串指針
 lpszName
lpsz    LPCSTR 32
位常量字符串指針
 lpszName
lpsz    LPCTSTR 32
Unicode集常量指針
 lpszName
h       handle Windows
對象句柄
 hWnd
lpfn    (*fn)() 
回調函數指針 Callback Far pointer to CALLBACK function lpfnAbort

匈牙利命名法

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;

 

 

前綴 符號類型                   實例                範圍

IDR_ 不同類型的多個資源共享標識 IDR_MAIINFRAME      10x6FFF
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          80xDEEF


應用程序符號命名規範

Microsoft MFC宏命名規範名稱類型

_AFXDLL 唯一的動態連接庫(Dynamic Link LibraryDLL)版本
_ALPHA   
僅編譯DEC Alpha處理器
_DEBUG   
包括診斷的調試版本
_MBCS    
編譯多字節字符集
_UNICODE 
在一個應用程序中打開Unicode
AFXAPI   MFC
提供的函數

CALLBACK 
通過指針回調的函數


庫標識符命名法 標識符值和含義

u ANSIN)或UnicodeU
調試或發行: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

 

發佈了43 篇原創文章 · 獲贊 8 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章