`
lovecontry
  • 浏览: 1037083 次
文章分类
社区版块
存档分类
最新评论

匈牙利命名规范介绍(转载)

 
阅读更多

匈牙利命名规范

几年以前,Charles Simonyi(他后来成为微软的著名程序员)设计了一种以前缀为基础的命名方法,这种方法后来称为"匈牙利表示法"以记念他.他的思想是根据每个标识符所代表的含义给它一个前缀.微软后来采用了这个思想,给每个标识符一个前缀以说明它的数据类型.因此,整型变量的前缀是n,长整型变量是nl,字符型数组变量是ca,以及字符串(以空类型结尾的字符数组)以sz为前缀.这些名字可能会非常古怪.比如说:lpszFoo表示"Foo"是一个指向以空字符为结尾的字符串的长整型指针.

这种方法的优点是使人能够通过变量的名字来辨别变量的类型,而不比去查找它的定义.遗憾的是,这种方法不仅使变量名字非常绕口,而且使改变变量类型的工作变得十分艰巨.在Windows3.1中,整型变量为16为宽.如果我们在开始时采用了一个整型变量,但是在通过30---40个函数的计算之后,发现采用整型变量宽度不够,这时我们不仅要改变这个变量的类型,而且要改变这个变量在这30--40个函数中的名字.

因为不切实际,除了一些顽固的Windows程序员外已经没有人再使用"匈牙利表示法"了.毫无疑问,在某种场合它依然存在,但大部分人现在已经抛弃它了.一般而言,输入前缀是一种糟糕的想法,因为它把变量于其类型紧紧地绑在了一起.

对于30行以下的函数,匈牙利方法一般有优势。

尤其是对界面编程,有优势。

但对于有强烈的算法要求、尤其是有很多抽象类型的C++程序,匈牙利方法简直是一个灾难。

看你用在什么地方。

现在有了很好的IDE工具,如:VC,SourceInsight等.

选中变量,会自动提示告诉你它的声明和定义,这样

匈牙利命名法就没有很大的必要了.

无非就是为了程序可读性较好.

实际上良好的代码书写习惯比强制使用匈牙利命名法更重要.

系统性。整体性。可读性。分类要清楚。要有注释!

匈牙利命名法是微软推广的一种关于变量、函数、对象、前缀、宏定义等各种类型的符号的命名规范。匈牙利命名法的主要思想是:在变量和函数名中加入前缀以增进人们对程序的理解。它是由微软内部的一个匈牙利人发起使用的,结果它在微软内部逐渐流行起来,并且推广给了全世界的Windows开发人员。下面将介绍匈牙利命名法,后面的例子里也会尽量遵守它和上面的代码风格。还是那句话,并不是要求所有的读者都要去遵守,但是希望读者作为一个现代的软件开发人员都去遵守它。

a Array 数组

b BOOL (int) 布尔(整数)

by Unsigned Char (Byte) 无符号字符(字节)

c Char 字符(字节)

cb Count of bytes 字节数

cr Color reference value 颜色(参考)值

cx Count of x (Short) x的集合(短整数)

dw DWORD (unsigned long) 双字(无符号长整数)

f Flags (usually multiple bit values) 标志(一般是有多位的数值)

fn Function 函数

g_ global 全局的

h Handle 句柄

i Integer 整数

l Long 长整数

lp Long pointer 长指针

m_ Data member of a class 一个类的数据成员

n Short int 短整数

p Pointer 指针

s String 字符串

sz Zero terminated String 以0结尾的字符串

tm Text metric 文本规则

u Unsigned int 无符号整数

ul Unsigned long (ULONG) 无符号长整数

w WORD (unsigned short) 无符号短整数

x,y x, y coordinates (short) 坐标值/短整数

v void 空

有关项目的全局变量用g_开始,类成员变量用m_,局部变量若函数较大则可考虑用l_用以显示说明其是局部变量。

前缀 类型 例子

g_ 全局变量 g_Servers

C 类或者结构体 CDocument,CPrintInfo

m_ 成员变量 m_pDoc,m_nCustomers

VC常用前缀列表:

前缀 类型 描述 例子

ch char 8位字符 chGrade

ch TCHAR 16位UNICODE类型字符 chName

b BOOL 布尔变量 bEnabled

n int 整型(其大小由操作系统决定) nLength

n UINT 无符号整型(其大小由操作系统决定) nLength

w WORD 16位无符号整型 wPos

l LONG 32位有符号整型 lOffset

dw DWORD 32位无符号整型 dwRange

p * Ambient memory model pointer 内存模块指针,指针变量 pDoc

lp FAR* 长指针 lpDoc

lpsz LPSTR 32位字符串指针 lpszName

lpsz LPCSTR 32位常量字符串指针 lpszName

lpsz LPCTSTR 32位UNICODE类型常量指针 lpszName

h handle Windows对象句柄 hWnd

lpfn (*fn)() 回调函数指针 Callback Far pointer to CALLBACK function lpfnAbort

Windows对象名称缩写:

Windows对象 例子变量 MFC类 例子对象

HWNDhWnd;CWnd* pWnd;

HDLG hDlg;CDialog*pDlg;

HDChDC; CDC*pDC;

HGDIOBJhGdiObj;CGdiObject* pGdiObj;

HPEN hPen; CPen* pPen;

HBRUSH hBrush; CBrush* pBrush;

HFONT hFont; CFont* pFont;

HBITMAP hBitmap; CBitmap* pBitmap;

HPALETTE hPalette; CPalette* pPalette;

HRGN hRgn; CRgn* pRgn;

HMENU hMenu; CMenu* pMenu;

HWND hCtl; CStatic* pStatic;

HWND hCtl; CButton* pBtn;

HWND hCtl; CEdit* pEdit;

HWND hCtl; CListBox* pListBox;

HWND hCtl; CComboBox* pComboBox;

分享到:
评论

相关推荐

    node-v9.2.1-linux-x86.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v9.1.0-linux-s390x.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    2024年中国MXene行业研究报告.docx

    2024年中国MXene行业研究报告

    TensorFlow安装步骤

    附件是TensorFlow安装步骤,文件绿色安全,请大家放心下载,仅供交流学习使用,无任何商业目的!

    ISO IEC 27001-2022 信息安全、网络安全和隐私保护信息安全管理系统要求.pdf

    ISO IEC 27001-2022 信息安全、网络安全和隐私保护信息安全管理系统要求.pdf

    广东工业大学电工学考试试卷B期末考试试题回忆版.doc

    此试题是考试后回忆版本,你会发现是惊喜。恭喜你考个好成绩。

    编译程序构造的一般原理和基本方法.pdf

    编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

    node-v8.9.4-linux-x86.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    计算机二级【公共基础知识速学教程】.pdf

    内容概要:这份资料包含了计算机二级公共基础知识速学教程的内容大纲,涵盖了数据结构与算法、程序设计基础、软件工程基础、数据库设计基础等多个章节。其中包括了算法复杂度、数据结构、栈、队列、链表、二叉树、查找、排序等内容,以及程序设计方法、软件工程概念、数据库设计原理等知识点。 适用人群:适合希望系统学习计算机二级公共基础知识的学生、计算机专业学习者、程序员、软件工程师以及对数据结构、算法和数据库设计感兴趣的人群,希望通过系统学习提升自己的计算机基础知识和技能。 使用场景及目标:该教程可用于计算机相关专业的课程学习、自学提升或备考计算机二级公共基础考试。学习者可以通过逐章学习和实践,掌握数据结构与算法、程序设计基础、软件工程基础和数据库设计基础等知识,提高自己在计算机领域的理论基础和实践能力。 其他说明:学习者在使用这份教程时,可以结合实际案例和练习题进行深入学习和巩固。建议按照章节顺序系统学习,理解各个知识点的概念和应用,并通过实践项目或练习加深对计算机基础知识的理解和掌握。通过系统学习,可以提升自己在计算机领域的专业水平和能力。

    IEC 60364-7-722-2018 低压电气装置.第7-722部分:特殊装置或场所的要求.电动车辆的电源.pdf

    IEC 60364-7-722-2018 低压电气装置.第7-722部分:特殊装置或场所的要求.电动车辆的电源.pdf

    ISO IEC 27021-2017 信息技术.安全技术.信息安全管理系统专业人员的能力要求.pdf

    ISO IEC 27021-2017 信息技术.安全技术.信息安全管理系统专业人员的能力要求.pdf

    减速振动控制有限公司

    减速振动控制有限公司

    2024年中国5G基站射频元件行业研究报告.docx

    2024年中国5G基站射频元件行业研究报告

    node-v8.11.3-linux-arm64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    云服务H13831题库HCIE CloudService SolutionsArchitect

    云服务H13831题库HCIE CloudService SolutionsArchitect

    2023年美赛特等奖论文-C-2307166-解密.pdf

    大学生,数学建模,美国大学生数学建模竞赛,MCM/ICM,2023年美赛特等奖O奖论文

    大模型简历模板之CV简历模板1.doc

    大模型简历模板通常包括个人信息、求职目标、教育背景、工作经历、技能专长、项目经验、荣誉奖项等内容。通过清晰的排版和详细的描述,展示出个人的专业能力和职业发展规划,吸引用人单位的注意。

    SBC0001345K.8 SBC0001345K.10 手册

    SBC0001345K.8 SBC0001345K.10 手册

    node-v10.15.1-linux-armv6l.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    MAGLINK LX 控制台手册

    MAGLINK LX 控制台手册

Global site tag (gtag.js) - Google Analytics