匈牙利命名法

it2025-10-05  3

变量(还包含宏)的命名规则,比較系统和彻底的有 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  

转载于:https://www.cnblogs.com/bhlsheji/p/4218519.html

相关资源:数据结构—成绩单生成器
最新回复(0)