匈牙利命名法是一種程式設計時的命名規範。基本原則是:變數名=屬性+型別+物件描述,其中每一物件的名稱都要求有明確含義,可以取物件名字全稱或名字的一部分。命名要基於容易記憶容易理解的原則。保證名字的連貫性是非常重要的。
舉例來說,表單的名稱為form,那麼在匈牙利命名法中可以簡寫為frm,則當表單變數名稱為switchboard時,變數全稱應該為 frmswitchboard。這樣可以很容易從變數名看出switchboard是乙個表單,同樣,如果此變數型別為標籤,那麼就應命名成 lblswitchboard。可以看出,匈牙利命名法非常便於記憶,而且使變數名非常清晰易懂,這樣,增強了**的可讀性,方便各程式設計師之間相互交流**。
這種命名技術是由一位能幹的microsoft程式設計師查爾斯·西蒙尼(charles simonyi) 提出的,他出生在匈牙利。在 microsoft 公司中和他一起工作的人被教會使用這種約定。這對他們來說一切都很正常。但對那些 simonyi 領導的專案組之外的人來說卻感到很奇特,他們認為這是死板的表達方式,甚至說帶有這樣奇怪的外觀是因為它是用匈牙利文寫的。從此這種命名方式就被叫做匈牙利命名法。
據說這種命名法是一位叫 charles simonyi 的匈牙利程式設計師發明的,後來他在微軟呆了幾年,於是
這種命名法就通過微軟的各種產品和文件資料向世界傳播開了。現在,大部分程式設計師不管自己使用
什麼軟體進行開發,或多或少都使用了這種命名法。這種命名法的出發點是把量名變按:屬性+型別
+物件 描述的順序組合起來,以使程式設計師作變數時對變數的型別和其它屬性有直觀的了解,下面
是hn變數命名規範,其中也有一些是我個人的偏向:
屬性部分
全域性變數 g_
常量 c_
c++類成員變數 m_
靜態變數 s_
型別部分 指標
p 函式
fn 無效
v 控制代碼
h長整型 l
布林 b
浮點型(有時也指檔案) f
雙字 dw
字串 sz
短整型 n
雙精度浮點 d
計數c(通常用cnt) 字元
ch(通常用c) 整型
i(通常用n) 位元組
by 字
w 實型
r無符號 u
描述部分 最大
max 最小
min初始化
init
臨時變數
t(或temp)
源物件src
目的物件
dest
這裡順便寫幾個例子:
hwnd : h 是型別描述,表示控制代碼, wnd 是變數物件描述,表示視窗,所以 hwnd 表示視窗控制代碼;
g_cch : g_ 是屬性描述,表示全域性變數,c 和 ch 分別是計數型別和字元型別,一起表示變數類
型,這裡忽略了物件描述,所以它表示乙個對字元進行計數的全域性變數。
上面就是hn命名法的一般規則。
小結:匈牙利命名法
匈牙利命名法
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
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
匈牙利命名法
匈牙利命名法 匈牙利命名法是一種程式設計時的命名規範。基本原則是 變數名 屬性 型別 物件描述,其中每一物件的名稱都要求有明確含義,可以取物件名字全稱或名字的一部分。命名要基於容易記憶容易理解的原則。保證名字的連貫性是非常重要的。舉例來說,表單的名稱為form,那麼在匈牙利命名法中可以簡寫為frm,...
匈牙利命名法
匈牙利命名法 匈牙利命名法是一種程式設計時的命名規範。基本原則是 變數名 屬性 型別 物件描述,其中每一物件的名稱都要求有明確含義,可以取物件名字全稱或名字的一部分。命名要基於容易記憶容易理解的原則。保證名字的連貫性是非常重要的。舉例來說,表單的名稱為form,那麼在匈牙利命名法中可以簡寫為frm,...
匈牙利命名法
該約定是由生於匈牙利布達佩斯的charles simonyi 開發的,它通過在資料和函式名中加入額外的資訊以增進程式設計師對程式的理解。例如 char ch 所有的字元變數均以ch 開始 byte b 所有的位元組均冠以b long l 所有的長字均冠以l 對於指向某個資料型別的指標,可以先象上面那...