委托別人做網(wǎng)站 域名所有權(quán)2021年新聞?wù)?/h1>
匈牙利命名法匈牙利命名法是一種編程時的命名規(guī)范?;驹瓌t是:變量名=屬性+類型+對象描述,其中每一對象的名稱都要求有明確含義,可以取對象名字全稱或名字的一部分。命名要基于容易記憶容易理解的原則。保證名字的連貫性是非常重要的。 舉例來說,表單的名稱為form,那么在匈牙利命名法中可以簡寫為frm,則當(dāng)表單變量名稱為Switchboard時,變量全稱應(yīng)該為frmSwitchboard。這樣可以很容易從變量名看出Switchboard是一個表單,同樣,如果此變量類型為標(biāo)簽,那么就應(yīng)命名成lblSwitchboard??梢钥闯?#xff0c;匈牙利命名法非常便于記憶,而且使變量名非常清晰易懂,這樣,增強了代碼的可讀性,方便各程序員之間相互交流代碼。 這種命名技術(shù)是由一位能干的Microsoft程序員查爾斯·西蒙尼(Charles Simonyi) 提出的,他出生在匈牙利。在 Microsoft 公司中和他一起工作的人被教會使用這種約定。這對他們來說一切都很正常。但對那些 Simonyi 領(lǐng)導(dǎo)的項目組之外的人來說卻感到很奇特,他們認(rèn)為這是死板的表達(dá)方式,甚至說帶有這樣奇怪的外觀是因為它是用匈牙利文寫的。從此這種命名方式就被叫做匈牙利命名法。 據(jù)說這種命名法是一位叫 Charles Simonyi 的匈牙利程序員發(fā)明的,后來他在微軟呆了幾年,于是 這種命名法就通過微軟的各種產(chǎn)品和文檔資料向世界傳播開了?,F(xiàn)在,大部分程序員不管自己使用 什么軟件進行開發(fā),或多或少都使用了這種命名法。這種命名法的出發(fā)點是把量名變按:屬性+類型 +對象 描述的順序組合起來,以使程序員作變量時對變量的類型和其它屬性有直觀的了解,下面 是HN變量命名規(guī)范,其中也有一些是我個人的偏向: 屬性部分 全局變量 g_ 常量 c_ c++類成員變量 m_ 靜態(tài)變量 s_ 類型部分 指針 p 函數(shù) fn 無效 v 句柄 h 長整型 l 布爾 b 浮點型(有時也指文件) f 雙字 dw 字符串 sz 短整型 n 雙精度浮點 d 計數(shù) c(通常用cnt) 字符 ch(通常用c) 整型 i(通常用n) 字節(jié) by 字 w 實型 r 無符號 u 描述部分 最大 Max 最小 Min 初始化 Init 臨時變量 T(或Temp) 源對象 Src 目的對象 Dest 這里順便寫幾個例子: hwnd : h 是類型描述,表示句柄, wnd 是變量對象描述,表示窗口,所以 hwnd 表示窗口句柄; pfnEatApple : pfn 是類型描述,表示指向函數(shù)的指針, EatApple 是變量對象描述,所以它表示 指向 EatApple 函數(shù)的函數(shù)指針變量。 g_cch : g_ 是屬性描述,表示全局變量,c 和 ch 分別是計數(shù)類型和字符類型,一起表示變量類 型,這里忽略了對象描述,所以它表示一個對字符進行計數(shù)的全局變量。 上面就是HN命名法的一般規(guī)則。 小結(jié):匈牙利命名法 匈牙利命名法MFC、句柄、控件及結(jié)構(gòu)的命名規(guī)范 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; 一般前綴命名規(guī)范 前綴 類型 實例 C 類或結(jié)構(gòu) CDocument,CPrintInfo m_ 成員變量 m_pDoc,m_nCustomers 變量命名規(guī)范 前綴 類型 描述 實例 ch char 8位字符 chGrade ch TCHAR 如果_UNICODE定義,則為16位字符 chName b BOOL 布爾值 bEnable n int 整型(其大小依賴于操作系統(tǒng)) nLength n UINT 無符號值(其大小依賴于操作系統(tǒng)) nHeight w WORD 16位無符號值 wPos l LONG 32位有符號整型 lOffset dw DWORD 32位無符號整型 dwRange p * 指針 pDoc lp FAR* 遠(yuǎn)指針 lpszName lpsz LPSTR 32位字符串指針 lpszName lpsz LPCSTR 32位常量字符串指針 lpszName lpsz LPCTSTR 如果_UNICODE定義,則為32位常量字符串指針 lpszName h handle Windows對象句柄 hWnd lpfn callback 指向CALLBACK函數(shù)的遠(yuǎn)指針 前綴 符號類型 實例 范圍 IDR_ 不同類型的多個資源共享標(biāo)識 IDR_MAIINFRAME 1~0x6FFF IDD_ 對話框資源 IDD_SPELL_CHECK 1~0x6FFF HIDD_ 對話框資源的Help上下文 HIDD_SPELL_CHECK 0x20001~0x26FF IDB_ 位圖資源 IDB_COMPANY_LOGO 1~0x6FFF IDC_ 光標(biāo)資源 IDC_PENCIL 1~0x6FFF IDI_ 圖標(biāo)資源 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_ 對話框內(nèi)的控件 IDC_RECALC 8~0xDEEF Microsoft MFC宏命名規(guī)范 名稱 類型 _AFXDLL 唯一的動態(tài)連接庫(Dynamic Link Library,DLL)版本 _ALPHA 僅編譯DEC Alpha處理器 _DEBUG 包括診斷的調(diào)試版本 _MBCS 編譯多字節(jié)字符集 _UNICODE 在一個應(yīng)用程序中打開Unicode AFXAPI MFC提供的函數(shù) CALLBACK 通過指針回調(diào)的函數(shù) 庫標(biāo)識符命名法 標(biāo)識符 值和含義 u ANSI(N)或Unicode(U) d 調(diào)試或發(fā)行:D = 調(diào)試;忽略標(biāo)識符為發(fā)行。 靜態(tài)庫版本命名規(guī)范 庫 描述 NAFXCWD.LIB 調(diào)試版本:MFC靜態(tài)連接庫 NAFXCW.LIB 發(fā)行版本:MFC靜態(tài)連接庫 UAFXCWD.LIB 調(diào)試版本:具有Unicode支持的MFC靜態(tài)連接庫 UAFXCW.LIB 發(fā)行版本:具有Unicode支持的MFC靜態(tài)連接庫 動態(tài)連接庫命名規(guī)范 名稱 類型 _AFXDLL 唯一的動態(tài)連接庫(DLL)版本 WINAPI Windows所提供的函數(shù) Windows.h中新的命名規(guī)范 類型 定義描述 WINAPI 使用在API聲明中的FAR PASCAL位置,如果正在編寫一個具有導(dǎo)出API人口點的DLL,則可以在自己的API中使用該類型 CALLBACK 使用在應(yīng)用程序回叫例程,如窗口和對話框過程中的FAR PASCAL的位置 LPCSTR 與LPSTR相同,只是LPCSTR用于只讀串指針,其定義類似(const char FAR*) UINT 可移植的無符號整型類型,其大小由主機環(huán)境決定(對于Windows NT和Windows 9x為32位);它是unsigned int的同義詞 LRESULT 窗口程序返回值的類型 LPARAM 聲明lParam所使用的類型,lParam是窗口程序的第四個參數(shù) WPARAM 聲明wParam所使用的類型,wParam是窗口程序的第三個參數(shù) LPVOID 一般指針類型,與(void *)相同,可以用來代替LPSTR
Camel 命名法 :除第一個 單詞外,所有單詞的首字母大寫,其他字母小寫
Pascal命名法:與Camel命名法相似,不過Pascal命名法是連第一個單詞的首字母也要大寫
所有的成員變量前加前綴"_"。例如在公共類DataBase中聲明一個私有成員變量_connectionString。
接口的名稱前加前綴“I”。例如常見一個公共接口Iconvertible。
方法的命名,一般將其命名為動賓短語。
所有的成員變量聲明在類的頂端,用一個換行把它和方法分開
在C#中,以帕斯卡命名法和駱駝命名法居多。 C#中的編碼慣例中,給公共成員變量(public)、受保護的成員變量(private)、或內(nèi)部成員變量(internal)命名時,應(yīng)使用帕斯卡命名法,如score、name、Status均為有效的成員變量名?!?不過我不喜歡。。 宋勁衫《linux C編程一站式學(xué)習(xí)》第132頁中有這樣一段: “2。內(nèi)核編碼風(fēng)格規(guī)定變量、函數(shù)和類型采用全小寫加下劃線的方式命名,常量(比如宏定義和枚舉常量)采用全大寫加下劃線的方式命名,比如上一節(jié)舉例的函數(shù)名radix_tree_insert、類型名struct radix_tree_root、常量名RADIX_TREE_MAP_SHIFT等。微軟發(fā)明了一種變量命名法叫匈牙利命名法(Hungarian notation),在變量名中用前綴表示類型,例如iCnt(i表示int)、pMsg(p表示pointer)、lpszText(lpsz表示long pointer to a zero-ended string)等。Linus在 [CodingStyle]中毫不客氣地諷刺了這種寫法:"Encoding the type of a function into the name (so-called Hungarian notation) is brain damaged - the compiler knows the types anyway and can check those, and it only confuses the programmer. No wonder MicroSoft makes buggy programs."代碼風(fēng)格本來就是一個很有爭議的問題,如果你接受本章介紹的內(nèi)核編碼風(fēng)格(也是本書所有范例代碼的風(fēng)格),就不要使用大小寫混合的變量命名方式[19],更不要使用匈牙利命名法?!?