匈牙利命名法
基本原则是:变量名=属性+类型+对象描述,其中每一对象的名称都要求有明确含义,可以取对象名字全称或名字的一部分。命名要基于容易记忆容易理解的原则。保证名字的连贯性是非常重要的。
MFC、句柄、控件及结构的命名规范
匈牙利命名法是一种编程规范,它主要用于C++和早期的Windows编程,旨在通过变量名来显式地表达变量的类型和用途,从而提高代码的可读性和可维护性。这种命名方法由匈牙利工程师史蒂夫·麦克康奈尔提出,故被称为“匈牙利命名法”。
在匈牙利命名法中,变量名由三部分组成:
1. **属性(Attribute)**:这一部分描述了变量的类型或者用途。例如,`m_`通常用于表示成员变量,`b`代表布尔类型,`n`代表整型,`h`代表句柄等。
2. **类型(Type)**:这部分反映变量的实际数据类型。例如,`BOOL`、`int`、`HWND`等。在Windows编程中,常常使用简写,如`b`代替`BOOL`,`n`代替`int`等。
3. **对象描述(Object Description)**:这一部分描述了变量所代表的对象或其功能。例如,`Wnd`可能表示窗口,`Ctl`可能表示控件,`Pnt`可能表示点等。
以下是一些具体的例子:
- `HWNDhWnd`:`HWND`是Windows中的窗口句柄类型,`h`表示句柄,`Wnd`描述了这是一个窗口相关的句柄。
- `CWnd*pWnd`:`CWnd`是MFC中表示窗口类的对象,`p`表示这是一个指向对象的指针,`Wnd`描述了对象的类型。
- `HBITMAPhBitmap`:`HBITMAP`是位图句柄类型,`h`表示句柄,`Bitmap`描述了这是位图相关的句柄。
在MFC(Microsoft Foundation Classes)框架中,匈牙利命名法也有特定的应用,例如:
- `CDocument`、`CPrintInfo`:这些是MFC中的类名,`C`表示这是一个类。
- `m_pDoc`、`m_nCustomers`:`m_`表示这是类的成员变量,`p`表示指针,`n`表示整型。
对于Windows API的资源定义,也有特定的前缀:
- `IDR_MAINFRAME`:`IDR_`表示多个资源共享标识,`MAINFRAME`描述了资源的类型。
- `IDD_SPELL_CHECK`:`IDD_`表示对话框资源,`SPELL_CHECK`描述对话框的用途。
- `IDB_COMPANY_LOGO`:`IDB_`表示位图资源,`COMPANY_LOGO`描述位图的内容。
宏命名方面,MFC提供了一些宏,如`AFXAPI`用于标记MFC提供的函数,`CALLBACK`用于表示通过指针回调的函数。而在库的命名上,如`NAFXCWD.LIB`,`UAFXCWD.LIB`等,这些库名包含了是否支持Unicode以及是否为调试版本的信息。
匈牙利命名法是一种强化代码可读性的编程约定,尽管在现代编程实践中,一些开发者转向了其他命名规范,如驼峰命名法或下划线命名法,但在早期的Windows开发和MFC应用中,匈牙利命名法仍然有着广泛的应用。理解和遵循这种命名规则可以帮助理解老代码库,以及在需要的时候编写符合这种规范的代码。