匈牙利命名法

匈牙利命名法

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

变量(还包含宏)的命名规则,比較系统和彻底的有
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
 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/118091.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • win11的 logstash 7.6.2 连接es 7.6.2集群「建议收藏」

    win11的 logstash 7.6.2 连接es 7.6.2集群「建议收藏」小伙伴们,你们好,我是老寇一、下载logstash(跳过)注意:一定要与es版本保持一致二、启动es集群(es集群搭建)三、配置logstash.confinput{tcp{port=>5044codec=>json_lines}}output{elasticsearch{hosts=>[“192.

  • bootoption没有启动项_javacontinue的用法

    bootoption没有启动项_javacontinue的用法一、现象从fetch说起,用fetch构造一个POST请求。1fetch(‘http://127.0.0.1:8000/api/login’,{2method:”POST”,3headers:({4’Content-Type’:’application/x-www-form-urlencoded’5}),6body:”name=”+name…

    2022年10月30日
  • 设置下一跳(ensp配置实例大全)

    下一跳:首先要知道出口,也就是路由器的发出口。连接线有两个端点,其中一个就是路由器的发出口,另一端就是下一跳。对于其中一个路由器来说,它要发送到其他网段,那么目标地址就是要发送的网段的网络地址,出接口就是路由器的出口,下一跳就是路由器出口相连的那根线的另一端(这个路由器只能做这么多,其余的交给下一个路由器)…

  • 基于VirtualBox虚拟机安装Ubuntu图文教程

    一.下载安装VirtualBox官网下载VirtualBox,目前版本:VirtualBox5.1.8forWindowshostsx86/amd64下载好了安装VirtualBox,一路Next就可以了,这个比较简单。运行VirtulBox程序,如下图:配置VirtualBox。按 CTRL+G打开全局设定,根据需要可以设定虚拟脑位置和界面语言:

  • eclipse调试debug技巧_eclipse退出debug模式

    eclipse调试debug技巧_eclipse退出debug模式Eclipse中的debug模式使用指Debug模式是在eclipse的使用中非常常见的对程序进行debug的方式,通过debug模式我们可以更加方便快捷的定位问题出现的位置,并且找到原因进行修改.但是很多小白同学对debug模式的使用方式还不是很清楚,那么我这边会带着大家去了解一下eclipse的debug模式的使用; Debug模式的启动方式 在eclipse中,我们运行…

    2022年10月16日
  • 什么是OJ _OJ是什么?[通俗易懂]

    什么是OJ _OJ是什么?[通俗易懂]OnlineJudgeSystem即在线评测系统(以下简称OJ),用户可以在线的提交程序源代码,OJ会对这些源代码进行编译和运行,并且通过每道题目预先设计的数据和时空限制等标准来检验用户程序的正确性。用户提交的程序在OJ下执行的时候会受到严格的限制,包括且不限于时间的限制、内存的限制、系统接口的限制和安全限制。用户程序执行的输出结果会被OJ接收并保存,然后通过裁判程序进行比较用户输出和标…

发表回复

您的电子邮箱地址不会被公开。

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