C、C++中命名规范
来源:互联网 发布:java培训就业前景 编辑:程序博客网 时间:2024/06/06 03:02
转自:http://blog.csdn.net/jinzhilong580231/article/details/7717647
mseddl: 有一个规范的命名方法是非常重要的,要尽量做到自己的代码别人看起来像小说一样优美。以下为正文:
//*****************************************************我是分隔符***********************************************************//
转自:http://chenuaizhang2008.blog.163.com/blog/static/727635720115212716665/
C++以及MFC的命名规则基本上是符合匈牙利命名法的,匈牙利命名法是一种编程时的命名规范。基本原则是:变量名=属性+类型+对象描述,其中每一对象 的名称都要求有明确含义,可以取对象名字全称或名字的一部分。命名要基于容易记忆容易理解的原则。保证名字的连贯性是非常重要的。
举例来说,表单的名称为form,那么在匈牙利命名法中可以简写为frm,则当表单变量名称为 Switchboard时,变量全称应该为frmSwitchboard。这样可以很容易从变量名看出Switchboard是一个表单,同样,如果此变 量类型为标签,那么就应命名成lblSwitchboard。可以看出,匈牙利命名法非常便于记忆,而且使变量名非常清晰易懂,这样,增强了代码的可读 性,方便各程序员之间相互交流代码。
这种命名技术是由一位能干的Microsoft程序员查尔斯·西蒙尼(Charles Simonyi) 提出的,他出生在匈牙利。在 Microsoft 公司中和他一起工作的人被教会使用这种约定。这对他们来说一切都很正常。但对那些 Simonyi 领导的项目组之外的人来说却感到很奇特,他们认为这是死板的表达方式,甚至说带有这样奇怪的外观是因为它是用匈牙利文写的。从此这种命名方式就被叫做匈牙 利命名法。
据说这种命名法是一位叫 Charles Simonyi 的匈牙利程序员发明的,后来他在微软呆了几年,于是 这种命名法就通过微软的各种产品和文档资料向世界传播开了。现在,大部分程序员不管自己使用 什么软件进行开发,或多或少都使用了这种命名法。这种命名法的出发点是把量名变按:属性+类型 +对象 描述的顺序组合起来,以使程序员作变量时对变量的类型和其它属性有直观的了解,下面是HN(Hungarian Notation)变量命名规范,其中也有一些是我个人的偏向:
属性部分
全局变量
g_
常量
c_
c++类成员变量
m_
静态变量
s_
类型部分
指针
p
函数
fn
无效
v
句柄
h
长整型
l
布尔
b
浮点型(有时也指文件)
f
双字
dw
字符串
sz (String Zero 以零结尾的字符串)
短整型
n
双精度浮点
d
计数
c(通常用cnt)
字符
ch(通常用c)
整型
i(通常用n)
字节
by
字
w
实型
r
无符号
u
描述部分
最大
Max
最小
Min
初始化
Init
临时变量
T(或Temp)
源对象
Src
目的对象
Dest
这里顺便写几个例子:
hwnd : h 是类型描述,表示句柄, wnd 是变量对象描述,表示窗口,所以 hwnd 表示窗口句柄;
pfnEatApple : pfn 是类型描述,表示指向函数的指针, EatApple 是变量对象描述,所以它表示
指向 EatApple 函数的函数指针变量。
g_cch : g_ 是属性描述,表示全局变量,c 和 ch 分别是计数类型和字符类型,一起表示变量类
型,这里忽略了对象描述,所以它表示一个对字符进行计数的全局变量。
上面就是HN命名法的一般规则。
匈牙利命名法
MFC、句柄、控件及结构的命名规范
Windows类型样本变量MFC类样本变量HWNDhWnd;CWnd*pWnd;HDLGhDlg;CDialog*pDlg;HDChDC;CDC*pDC;HGDIOBJhGdiObj;CGdiObject*pGdiObj;HPENhPen;CPen*pPen;HBRUSHhBrush;CBrush*pBrush;HFONThFont;CFont*pFont;HBITMAPhBitmap;CBitmap*pBitmap;HPALETTEhPaltte;CPalette*pPalette;HRGNhRgn;CRgn*pRgn;HMENUhMenu;CMenu*pMenu;HWNDhCtl;CState*pState;HWNDhCtl;CButton*pButton;HWNDhCtl;CEdit*pEdit;HWNDhCtl;CListBox*pListBox;HWNDhCtl;CComboBox*pComboBox;HWNDhCtl;CScrollBar*pScrollBar;HSZhszStr;CStringpStr;POINTpt;CPointpt;SIZEsize;CSizesize;RECTrect;CRectrect;一般前缀命名规范
前缀类型实例C类或结构CDocument,CPrintInfom_成员变量m_pDoc,m_nCustomers变量命名规范
前缀类型描述实例chchar8位字符chGradechTCHAR如果_UNICODE定义,则为16位字符chNamebBOOL布尔值bEnablenint整型(其大小依赖于操作系统)nLengthnUINT无符号值(其大小依赖于操作系统)nHeightwWORD16位无符号值wPoslLONG32位有符号整型lOffsetdwDWORD32位无符号整型dwRangep*指针pDoclpFAR*远指针lpszNamelpszLPSTR32位字符串指针lpszNamelpszLPCSTR32位常量字符串指针lpszNamelpszLPCTSTR如果_UNICODE定义,则为32位常量字符串指针lpszNamehhandleWindows对象句柄hWndlpfncallback指向CALLBACK函数的远指针范围
IDR_不同类型的多个资源共享标识IDR_MAIINFRAME1~0x6FFFIDD_对话框资源IDD_SPELL_CHECK1~0x6FFFHIDD_对话框资源的Help上下文HIDD_SPELL_CHECK0x20001~0x26FFIDB_位图资源IDB_COMPANY_LOGO1~0x6FFFIDC_光标资源IDC_PENCIL1~0x6FFFIDI_图标资源IDI_NOTEPAD1~0x6FFFID_来自菜单项或工具栏的命令ID_TOOLS_SPELLING0x8000~0xDFFFHID_命令Help上下文HID_TOOLS_SPELLING0x18000~0x1DFFFIDP_消息框提示IDP_INVALID_PARTNO8~0xDEEFHIDP_消息框Help上下文HIDP_INVALID_PARTNO0x30008~0x3DEFFIDS_串资源IDS_COPYRIGHT1~0x7EEFIDC_对话框内的控件IDC_RECALC8~0xDE在16位操作系统中
近指针是16位的指针,它只表示段内的偏移地址,因而只能对64k字节数据段内地址进行存取。
如 char near *p; p=(char near *)0xffff;
远指针是32位指针,它表示段地址:偏移地址,如定义远程指针p指向B500段的2号地址,即B500:0002,则可写作: char far *p; p=(char far *)0xB5000002; 因此,远指针可以进行跨段寻址,可以访问整个内存的地址。
在32位操作系统中,两种指针同义,均为32位。
Microsoft MFC宏命名规范
名称类型_AFXDLL唯一的动态连接库(Dynamic Link Library,DLL)版本_ALPHA仅编译DEC Alpha处理器_DEBUG包括诊断的调试版本_MBCS编译多字节字符集_UNICODE在一个应用程序中打开UnicodeAFXAPIMFC提供的函数CALLBACK通过指针回调的函数库标识符命名法
标识符值和含义uANSI(N)或Unicode(U)d调试或发行:D = 调试;忽略标识符为发行。静态库版本命名规范
库描述NAFXCWD.LIB调试版本:MFC静态连接库NAFXCW.LIB发行版本:MFC静态连接库UAFXCWD.LIB调试版本:具有Unicode支持的MFC静态连接库UAFXCW.LIB发行版本:具有Unicode支持的MFC静态连接库动态连接库命名规范
名称类型_AFXDLL唯一的动态连接库(DLL)版本WINAPIWindows所提供的函数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基本概念
应用概述
驼峰法(小驼峰法)
Pascal法(大驼峰法)
比如:排序的函数,sort;列出学生的函数,listStudent
注释
单行注释有两种形式:
1、需要注释行代码的末尾,一般与代码间用一个tab分割,这种情况一般用于说明一行代码的作用,或者是某些特殊的说明。例如:STUDENT stStudent;//学生结构体变量
2、需要注释代码行的下一行,一般在注释之前也要空一行,这种情况一般用在一段代码前的注释,或是对分支含义进行注释。
例如:
//如果条件A成立,退出
if (A)
{
return;
}
多行注释有两种情况:
例如:
/*if (A)
{
return;
}
if (B)
{
return;
}
*/
2、用于对完成同一个目的大段代码的注释,最典型的就是代码的开头说明注释,注释的方式如下:
例如:
/********************************************************************************
//Class Name : CUtility
//Description : Common Tool
//Language : c++
//OS Platform : unix&linux
//Author : silent(lsnylnnn@163.net)
//Version : 1.0
//Copyright : 2008 - Genius, All Rights Reserved.
//Revision Histroy : Mender (YYYY-MM-DD)
silent 2008-10-30 Creation
silent 2008-11-07 Add GetEnv
silent 2008-11-08 Modify GetEnv
********************************************************************************/
分行
sprintf(szTemp, "%04d%02d%02d%02d%02d%02d",
ltm->tm_year + 1900,
ltm->tm_mon + 1,
ltm->tm_mday,
ltm->tm_hour,
ltm->tm_min, ltm->tm_sec);
注意缩进,依然是tab键
运算符书写
有个简单标准:非一元运算符两边应该有个空格,例如:int i = 10 + 4;
- C,C++中命名规范
- objective-c中命名规范
- C、C++中命名规范
- C,C++中命名规范
- C#-C#命名规范
- Objective-c 命名规范
- C/C++命名规范
- C/C++命名规范
- .net(C#)命名规范
- Objective-c命名规范
- C语言命名规范
- VS.NET2003(c#)命名规范
- VS.NET2003(c#)命名规范
- C语言常见命名规范
- C语言常见命名规范
- C\C++变量命名规范
- C/C++变量命名规范
- C语言之命名规范
- 读王垠《编程的智慧》笔记
- Android TV -5.2- Working with Channel Data
- 界面元素构件查询SQL的生成
- Android TV -5.3- Managing User Interaction
- POJ 2785_4 Values whose Sum is 0
- C、C++中命名规范
- p39最大子数组问题o(lgn)
- u-boot-2016.01移植笔记之支持dm9000
- 天声人語 20160210 公平中立をめぐる空気
- html5 时钟
- 日经春秋 20160210
- Centos6.5分区及安装系统准备
- TortoiseHg
- 运算符优先级