匈牙利命名法


匈牙利命名法

來源 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM