日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

匈牙利命名法 介绍 淘汰分析及取舍

發布時間:2024/1/1 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 匈牙利命名法 介绍 淘汰分析及取舍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、是什么

匈牙利命名:開頭字母用變量類型的縮寫,其余部分用變量的英文單詞或縮寫,要求英文單詞首字母大寫。例如:

int iMyAge; // “i”是int類型的縮寫; char cMyName[10]; // “c”是char類型的縮寫; float fManHeight; // “f”是float類型的縮寫;

2、為什么淘汰

優點

能夠通過變量的名字來識別變量的類型,而不必去查找它的定義.

缺點

(1)使變量名字非常繞口,例如:lpszFoo表示"Foo"是一個指向以空字符為結尾的字符串的長整型指針.

(2)使改變變量類型的工作變得復雜。
例如:在Windows3.1中,整型變量為16為寬.如果我們在開始時采用了一個整型變量,但是在通過30---40個函數的計算之后,發現采用整型變量寬度不夠,這時我們不僅要改變這個變量的類型,而且要改變這個變量在這30--40個函數中的名字.
由此可見,使用類型前綴是一種糟糕的想法,因為它把變量和其類型緊緊地綁在了一起.

(3)現在許多IDE帶有自動提示功能,直接提示變量類型,所以匈牙利命名法冗余了。

(4)最重要的是,不同語言中有大量特有的數據類型,還有大量自定義的數據類型,不同的人很容易混淆不同類型前綴,導致類型前綴無法達到識別類型的目的。

3、如何取舍

(1)控件的命名依舊采用Hungarian Notation,控件上的Hungarian Notation要靠譜的多,例如:

Button -> btn Label -> lbl TextBox -> txt …

(2)變量命名上,僅保留以下前綴

global -> g_ member -> m_ static -> s_ pointer -> p char*/wchar_t* -> psz char[]/wchar_t[] ->sz

m_能夠與非成員變量區分,而且基本可以避免變量重名而需要使用this指針的情況
g_和s_的意圖無需多說,臭名昭著的global和static從來都需要特別對待
有人可能會對剩下的三個前綴頗有微詞,我的理由是,這三個類型(其實只有兩個)實在太特殊而且需要引起足夠的注意,加前綴的意圖則是告訴你:be careful! be careful!be careful!
其他的類型都盡量不加前綴。

4、匈牙利命名法前綴列舉

(1)通用類型

前綴類型中文說明
aArray數組
bBOOL(int)布爾(整數)
byUnsigned Char(Byte)無符號字符(字節)
cChar字符(字節)
chchar8位字符
chTCHAR如果_UNICODE定義,則為16位字符
cbCount of Bytes字節數
crColor Reference Value顏色(參考)值
cxCount of x(Short)坐標x 的集合(短整數)
dwDWORD32位無符號整型
fFlags(usually multiple bit values)標志(一般是有多位的數值)
fnFunction函數
g_Global全局的
hHandle句柄
iInteger整數
lLong長整數
lpLong Pointer長指針
m_Data Member of a Class一個類的數據成員
nShort Integer短整數
pPointer *指針
lpFAR*遠指針
lpfncallback指向CALLBACK函數的遠指針
lpszLPSTR32位字符串指針
lpszLPCSTR32位常量字符串指針
lpszLPCTSTR如果_UNICODE定義,則為32位常量字符串指針
sString字符串
szZero Terminated String以零結尾的字符串
tmText Metric文本規則
uUnsigned Integer無符號整數
ulUnsigned Long(ULONG)無符號長整數
wWORD(Unsigned Short)無符號短整數
x,yx, y Coordinates (Short)坐標值(短整數)
vVoid

(2)使用范圍

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

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

(3)VC常用前綴

前綴類型描述例子
chchar8位字符chGrade
chTCHAR16位Unicode集字符chName
bBOOL布爾變量bEnable
nint整型nLength
nUINT無符整型nLength
wWORD16位無符號整型wPos
lLong32位有符號整型lOffset
dwDWORD32位無符號整型dwRange
p*指針變量,內存模塊指針(Ambient memory model point)pDoc
lpFar*長指針lpDoc
lpszLPSTR32位字符串指針lpszName
lpszLPCSTR32位常量字符串指針lpszName
lpszLPCTSTR32位Unicode集常量指針lpszName
hhandleWindows對象句柄hWnd
lpfn(*fn)()?回調函數指針 Callback Far pointer to CALLBACK functionlpfnAbort

(4)Windows、MFC、句柄、控件及結構的命名規范:

Windows類型樣本變量MFC類樣本變量
HWNDhWndCWnd*pWnd
HDLGhDlgCDialog*pDlg
HDChDCCDC*pDC
HGDIOBJhGdiObjCGdiObject*pGdiObj
HPENhPenCPen*pPen
HBRUSHhBrushCBrush*pBrush
HFONThFontCFont*pFont
HBITMAPhBitmapCBitmap*pBitmap
HPALETTEhPaltteCPalette*pPalette
HRGNhRgnCRgn*pRgn
HMENUhMenuCMenu*pMenu
HWNDhCtlCState*pState
HWNDhCtlCButton*pButton
HWNDhCtlCEdit*pEdit
HWNDhCtlCListBox*pListBox
HWNDhCtlCComboBox*pComboBox
HWNDhCtlCScrollBar*pScrollBar
HSZhszStrCStringpStr
POINTptCPointpt
SIZEsizeCSizesize
RECTrectCRectrect

(5)前綴含義

前綴符號類型實例范圍
IDR_不同類型的多個資源共享標識IDR_MAIINFRAME1~0x6FFF
IDD_對話框資源IDD_SPELL_CHECK1~0x6FFF
HIDD_對話框資源的Help上下文HIDD_SPELL_CHECK0x20001~0x26FF
IDB_位圖資源IDB_COMPANY_LOGO1~0x6FFF
IDC_光標資源IDC_PENCIL1~0x6FFF
IDI_圖標資源IDI_NOTEPAD1~0x6FFF
ID_來自菜單項或工具欄的命令ID_TOOLS_SPELLING0x8000~0xDFFF
HID_命令Help上下文HID_TOOLS_SPELLING0x18000~0x1DFFF
IDP_消息框提示IDP_INVALID_PARTNO8~0xDEEF
HIDP_消息框Help上下文HIDP_INVALID_PARTNO0x30008~0x3DEFF
IDS_串資源IDS_COPYRIGHT1~0x7EEF
IDC_對話框內的控件IDC_RECALC8~0xDEEF

(6)Microsoft MFC宏命名規范:

名稱類型
_AFXDLL唯一的動態連接庫(Dynamic Link Library,DLL)版本
_ALPHA僅編譯DEC Alpha處理器
_DEBUG包括診斷的調試版本
_MBCS編譯多字節字符集
_UNICODE在一個應用程序中打開Unicode
AFXAPIMFC提供的函數
CALLBACK通過指針回調的函數

(7)庫標識符命名法:

標識符值和含義
uANSI(N)或Unicode(U)
d調試或發行:D = 調試,忽略標識符為發行。

(8)靜態庫版本命名規范:

描述
NAFXCWD.LIB調試版本:MFC靜態連接庫
NAFXCW.LIB發行版本:MFC靜態連接庫
UAFXCWD.LIB調試版本:具有Unicode支持的MFC靜態連接庫
UAFXCW.LIB發行版本:具有Unicode支持的MFC靜態連接庫

(9)動態連接庫命名規范:

名稱類型
_AFXDLL唯一的動態連接庫(DLL)版本
WINAPIWindows所提供的函數

(10)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

參考文檔:

https://www.cnblogs.com/totem1990/archive/2012/03/26/2418474.html

https://blog.csdn.net/yangluoning/article/details/11628047

總結

以上是生活随笔為你收集整理的匈牙利命名法 介绍 淘汰分析及取舍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。