匈牙利命名法

匈牙利命名法

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

变量(还包含宏)的命名规则,比較系统和彻底的有
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://javaforall.net/118091.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • Netty之ByteBuf

    Netty之ByteBuf一、功能原理ByteBuf是一个byte存放的缓冲区。ByteBuf通过两个位置的指针来协助缓冲区的读写操作,读操作使用readIndex,写操作使用writeIndex。+——————-+——————+——————+|discardablebytes|readablebytes

    2022年9月19日
  • 2019最新Android面试题「建议收藏」

    2019最新Android面试题「建议收藏」金三银四到来了,找工作的好时候到了,小伙伴们是不是都在忙着找工作呢,小弟前一阵也是忙着在找工作,面试了好多公司,所幸的是进到了自己心仪的公司,也是很幸运的。下面我将自己亲身实战的面试题及收到的面试题总结并分享答案出来。欢迎各位大哥指导、指点。下面这些只是Android方面的知识,如果有需要Java方面的面试题的话,可以在下面留言。1.Activity生命周期(这个是必问的)onCrea…

    2022年5月11日
  • xshell的安装和使用_git详细教程

    xshell的安装和使用_git详细教程1、Xshell6的安装废话不多说直接上链接:链接:https://pan.baidu.com/s/1WCOxkdhLIZj7yLakWu4Tdw提取码:t3ak2、了解Xshell及其使用2.1、Xshell是什么东西?首先我们要知道Xshell是用来干什么的。Xshell其实就是一个远程终端工具,它可以将你的个人pc(个人电脑)和你在远端的机器连接起来,通过向Xshell输入命令然后他通过网络将命令传送给远端Linux机器然后远端的Linux机器将其运行结果通过网络传回个人电脑。.

    2022年9月8日
  • burpsuite 越权_自动发现IDOR(越权)漏洞的方法:使用BurpSuite中的Autozie和Autorepeater插件来检测和识别IDOR漏洞,而无需手动更改每个请求的参数…

    burpsuite 越权_自动发现IDOR(越权)漏洞的方法:使用BurpSuite中的Autozie和Autorepeater插件来检测和识别IDOR漏洞,而无需手动更改每个请求的参数…IDOR(越权)漏洞:也称为“不安全的直接对象引用”,当用户请求访问内部资源或基于用户提供的输入对象进行访问,服务器未执行合理的权限验证时,发生当前用户可以未经授权访问不属于其帐户权限的资源或数据。我们可以在BurpSuite插件库Bapp中安装Autorize和Autorepeater:使用Autorize发现IDOR漏洞让我们先来看一下“Autorize”。对于客户端发送的任何请求,它将执行…

    2022年6月7日
  • k8s(二)搭建「建议收藏」

    k8s(二)搭建「建议收藏」k8s安装 初始化环境kubernetes必要组件安装集群安装一主多从多主多从安装 初始化环境minibuke 用于快速构建单节点k8s的工具kubeadm 用于快速搭建k8s集群的工具二进制包 从官网下载每个组件的二进制包 一次去安装 对于理解k8s更有效作用nathostmaster10.0.3.11192.168.56.101node110.0.3.12192.168.56.102node210.0.3.14192.168.56.1

    2022年8月9日
  • pycharm如何创建py文件_pycharm输入不了

    pycharm如何创建py文件_pycharm输入不了PyCharm是一款很好用的编写Python工程的IDE,用PyCharm创建一个Python文件或者向工程添加一个.py文件时,为了更好的使所编写的代码在各操作环境更好的运行,我们往往需要在.py文件中添加头文件标注相关信息。例如:打开PyCharm程序,根据菜单栏中按照如下进入设置:File->settings->Editor->FileandCodeTem…

    2022年8月26日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号