匈牙利命名法

匈牙利命名法

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

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


相关推荐

  • CAN 接口测试[通俗易懂]

    CAN 接口测试[通俗易懂]CAN测试收发程序can发送测试#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<net/if.h>#include<sys/ioctl.h>#include<sys/socket…

  • java public interface_Java 接口interface的基础[通俗易懂]

    java public interface_Java 接口interface的基础[通俗易懂]原标题:Java接口interface的基础定义接口的时候是由关键字interface来定义自己是一个接口,格式如下:interface接口名接口体中包含常量的声明和抽象方法两部分接口体中只有抽象方法,没有普通的方法,而且接口体中所有的常量的访问权限一定都是public,而且是static常量,所有的抽象方法的访问权限一定都是public;eg:interfaceA{publicstati…

  • Centos下安装yum(完整教程)

    Centos下安装yum(完整教程)在安装yum的时候发现网上的方法参差不齐,不是很完整,以下是个人亲测,同时是总结出的最方便的方法,希望能帮助到大家!查看已安装的yumrpm-qa|grepyum删除已有的yumrpm-aq|grepyum|xargsrpm-e–nodeps下载以下安装包wgethttp://tel.mirrors.163.com/centos/7/os/x86_64/Packages/python-2.7.5-89.el7.x86_64.rpmwgethttp:.

  • 单面打印机打印双面小册子怎么打印_打印机小册子打印图解

    单面打印机打印双面小册子怎么打印_打印机小册子打印图解总结关键点:1.页数是4的倍数,不是的话在文件的前后同时添加空白页(前后的空白页会组成最外面的纸张);2.装订全部选择左/短边(尽管实际上是中线装订,并非靠边装订);3.进纸盒里要准备至少文档四分之一页数的纸张(例如:80页A5图片双面打印,需要80/2/2=20页,A4纸),提示缺纸的时候把出纸口的纸保持绝对朝向不变再次放入纸盒打印另一面,装好纸盒后按下进纸按钮(不要按电源键);…

  • java 取系统当前时间_java获取当前系统时间方法

    java 取系统当前时间_java获取当前系统时间方法importjava.text.SimpleDateFormat;importjava.util.Calendar;方法一:SimpleDateFormatsdf=newSimpleDateFormat(“yyyy-MM-ddHH:mm:ss”);Stringly_time=sdf.format(newjava.util.Date());System.out.println(…

    2022年10月19日
  • MySQL索引失效的几种场景

    MySQL索引失效的几种场景

    2021年11月10日

发表回复

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

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