高质量C++/C编程指南(第3章 命名规则)

林锐:《高质量的C/C++编程》 知错就改;经常温故而知新;坚持学习,天天向上。 阅读详情
 

第3章 命名规则

比较著名的命名规则当推Microsoft公司的“匈牙利”法,该命名规则的主要思想是“在变量和函数名中加入前缀以增进人们对程序的理解”。例如所有的字符变量均以ch为前缀,若是指针变量则追加前缀p。如果一个变量由ppch开头,则表明它是指向字符指针的指针。

“匈牙利”法最大的缺点是烦琐,例如

int    i,  j,  k; 

float  x,  y,  z;

倘若采用“匈牙利”命名规则,则应当写成

int    iI,  iJ,  ik;  // 前缀 i表示int类型

float  fX,  fY,  fZ;  // 前缀 f表示float类型

如此烦琐的程序会让绝大多数程序员无法忍受。

据考察,没有一种命名规则可以让所有的程序员赞同,程序设计教科书一般都不指定命名规则。命名规则对软件产品而言并不是“成败悠关”的事,我们不要化太多精力试图发明世界上最好的命名规则,而应当制定一种令大多数项目成员满意的命名规则,并在项目中贯彻实施。

3.1 共性规则

       本节论述的共性规则是被大多数程序员采纳的,我们应当在遵循这些共性规则的前提下,再扩充特定的规则,如3.2节。

 

l         【规则3-1-1】标识符应当直观且可以拼读,可望文知意,不必进行“解码”。

标识符最好采用英文单词或其组合,便于记忆和阅读。切忌使用汉语拼音来命名。程序中的英文单词一般不会太复杂,用词应当准确。例如不要把CurrentValue写成NowValue。

 

l         【规则3-1-2】标识符的长度应当符合“min-length && max-information”原则。

几十年前老ANSI C规定名字不准超过6个字符,现今的C++/C不再有此限制。一般来说,长名字能更好地表达含义,所以函数名、变量名、类名长达十几个字符不足为怪。那么名字是否越长约好?不见得! 例如变量名maxval就比maxValueUntilOverflow好用。单字符的名字也是有用的,常见的如i,j,k,m,n,x,y,z等,它们通常可用作函数内的局部变量。

 

l         【规则3-1-3】命名规则尽量与所采用的操作系统或开发工具的风格保持一致。

例如Windows应用程序的标识符通常采用“大小写”混排的方式,如AddChild。而Unix应用程序的标识符通常采用“小写加下划线”的方式,如add_child。别把这两类风格混在一起用。

 

l         【规则3-1-4】程序中不要出现仅靠大小写区分的相似的标识符。

例如:

int  x,  X;        // 变量x 与 X 容易混淆

void foo(int x);    // 函数foo 与FOO容易混淆

void FOO(float x);

 

l         【规则3-1-5】程序中不要出现标识符完全相同的局部变量和全局变量,尽管两者的作用域不同而不会发生语法错误,但会使人误解。

 

l         【规则3-1-6】变量的名字应当使用“名词”或者“形容词+名词”。

例如:

float  value;

float  oldValue;

float  newValue;

 

l         【规则3-1-7】全局函数的名字应当使用“动词”或者“动词+名词”(动宾词组)。类的成员函数应当只使用“动词”,被省略掉的名词就是对象本身。

例如:

DrawBox(); // 全局函数

              box->Draw();           // 类的成员函数

 

l         【规则3-1-8】用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。

例如:

int       minValue;

int       maxValue;

 

int       SetValue(…);

int       GetValue(…);

 

²        【建议3-1-1】尽量避免名字中出现数字编号,如Value1,Value2等,除非逻辑上的确需要编号。这是为了防止程序员偷懒,不肯为命名动脑筋而导致产生无意义的名字(因为用数字编号最省事)。

3.2 简单的Windows应用程序命名规则

       作者对“匈牙利”命名规则做了合理的简化,下述的命名规则简单易用,比较适合于Windows应用软件的开发。

 

l         【规则3-2-1】类名和函数名用大写字母开头的单词组合而成。

例如:

  class Node;           // 类名

  class LeafNode;            // 类名

  void  Draw(void);      // 函数名

  void  SetValue(int value);  // 函数名

 

l         【规则3-2-2】变量和参数用小写字母开头的单词组合而成。

例如:

    BOOL flag;

    int  drawMode;

 

l         【规则3-2-3】常量全用大写的字母,用下划线分割单词。

例如:

    const int MAX = 100;

    const int MAX_LENGTH = 100;

 

l         【规则3-2-4】静态变量加前缀s_(表示static)。

例如:

void Init(…)

{

       static int s_initValue; // 静态变量

       …

}

 

l         【规则3-2-5】如果不得已需要全局变量,则使全局变量加前缀g_(表示global)。

例如:

int g_howManyPeople;       // 全局变量

int g_howMuchMoney;       // 全局变量

 

l         【规则3-2-6】类的数据成员加前缀m_(表示member),这样可以避免数据成员与成员函数的参数同名。

例如:

void Object::SetValue(int width, int height)

{

m_width = width;

m_height = height;

}

 

l         【规则3-2-7】为了防止某一软件库中的一些标识符和其它软件库中的冲突,可以为各种标识符加上能反映软件性质的前缀。例如三维图形标准OpenGL的所有库函数均以gl开头,所有常量(或宏定义)均以GL开头。

3.3 简单的Unix应用程序命名规则

 

点云最小二乘法拟合曲线 文章目录一、引言 一、引言 阅读详情

相关推荐

高德地图可视化入门:零基础用Python+高德API打造你的第一个热力图

本文详细介绍了如何使用Python和高德地图API从零构建商业级热力图。通过环境配置、地理编码、数据清洗到最终可视化展示的全流程指南,帮助开发者快速掌握地图可视化技术,特别适合展示商圈人流、疫情热点等地理分布数据。

weixin_29053067的博客 303

命名的规则

命名规则

m0_61497245的博客 1404

TI DSP从COFF切换到EABI输出格式的5个关键修改点(TMS320F280025实测)

本文基于TMS320F280025实测,详细解析了TI DSP从COFF切换到EABI输出格式的5个关键修改点。核心差异在于EABI遵循ELF标准,涉及链接器优化、RAM数据共享、工具链升级、double数据类型位宽变化及链接器命令文件重构。迁移时需使用.retain指令防止关键数据被优化,利用NOINIT段保护共享RAM,并更新hex2000等工具,以确保BootLoader与应用程序稳定运行。

weixin_29189381的博客 265

第四章 UNIX的文件和目录

文件和目录的层次结构 UNIX通过目录管理文件 文件系统组织成树状结构 目录中可以含有多个文件,也可以含有子目录 文件和目录的命名 命名规则: 1,名字长度 2,取名的合法字符:除斜线外的所有字符都是命名的合法字符,斜线被用作了路径名分隔符 3,大小写字母有区别 shell的文件名通配符 规则 shell的文件名通配符是由shell程序解释的,不同的shell会有不同的文件名通配符 常用的shell文件名通配符: 1,*:匹配任意长度 2,?:匹配任意单字符 3,[ ]:匹配括号内任一字符 与D

qq_43701604的博客 2523

深入解析Flex NOC总线驱动的实时带宽与延迟优化策略

本文深入解析了Flex NOC总线驱动的核心价值与优化策略。通过解读`/proc/noc/real_time`中的实时带宽与延迟数据,并结合`sysfs`接口进行动态QoS调优,可以有效解决芯片内部数据拥堵问题。文章以智能摄像头和算力盒子的实际案例,详细说明了如何通过优先级调整、带宽限制和参数优化,提升系统在复杂任务下的实时性与稳定性。

weixin_29289821的博客 284

[面试]SoC验证工程师面试常见问题(三)

SoC 验证工程师面试中,SystemVerilog、UVM 和 SystemC 的代码题目通常涵盖面向对象编程、约束随机化、UVM 组件设计、内存建模等主题。通过练习上述示例题目和理解关键点,你可以更好地应对现场编码环节。如果有具体的面试方向(如特定协议验证)或公司偏好,可以提供更多信息,我会进一步定制题目和答案。祝你面试顺利!

元直的博客 1614

命名规则标识符 unix_关于全局唯一标识符

关于全局唯一标识符用几个世纪以来独一无二的标签命名你的接口摘要 本文介绍全局唯一标识符(GUID:Globally Unique IDentifier ),并说明如何从您喜欢的工作站创建一个。它包括以下部分:关于全局唯一标识符如何获取全局唯一标识符关于全局唯一标识符全局唯一标识符 (GUID) 旨在在使用该接口的任何地点和任何时间唯一标识该接口。它以128位编码,并且在空间和时间上都是唯一的:48...

weixin_30253289的博客 394

从零开始的机械臂yolov5抓取gazebo仿真(一)

本文介绍了如何将机械臂模型导出为URDF

qq_48427527的博客 1万+

C++编程规范

C++编程规范

m0_57692057的博客 1715

PCL 平面点云的凹多边形边界提取【2025最新版】

平面点云的凹多边形边界提取及边界轮廓线绘制。博客长期更新,本文最近更新时间为:2025年1月6日。

点云侠的博客 7183

【案例讲解】LVGL关于旋转的配置

在实现项目中,因为横竖屏的关系,需要对其做90度的旋转。配置旋转时发现一些局部刷新控件,旋转后效果不对。异常图标正常图标。

Bigan(安)的博客 4282

UNIX 风格的命名习惯

作者: 阙荣文 (querw) / querw@sina.com     有一个标准的编程风格非常重要,真的非常重要,千万不要不以为然, 尤其是大团队合作. 同时,遵循统一的命名规则, 程序代码看起来也更漂亮,更容易读懂.     主要有2种命名规则,一是Windows风格的匈牙利命名法. 我做了好几年的MFC开发. 我感觉匈法挺好的,不像一些人说的那样, 不可否认微软也出好东西. 匈

Que's C++ Studio 1万+

华为OD机考2025B卷 - 报文响应时间(Java & Python& JS & C++ & C )

华为OD机考2025B卷 - 报文响应时间

算法大师! 8083

高质量C++/C编程指南 -- 第3章 命名规则

第3章 命名规则比较著名的命名规则当推Microsoft公司的“匈牙利”法,该命名规则的主要思想是“在变量和函数名中加入前缀以增进人们对程序的理解”。例如所有的字符变量均以ch为前缀,若是指针变量则追加前缀p。如果一个变量由ppch开头,则表明它是指向字符指针的指针。 “匈牙利”法最大的缺点是烦琐,例如int i, j, k; float x, y, z;倘若采用“匈牙利”命名规则,则应当写成in

1125

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

读书笔记-高质量C++/C编程指南-第3章 命名规则

【序】最近痛下决心要好好学习下C和C++,以为即将来临的求职做点准备,在网上搜野指针的问题时看到了《高质量C++/C编程指南》,对于我这种想从事嵌入式开发的人来说,犹如收获到一本编程的bible似的。此文对C和C++编程的风格及注意事项进行了精妙的分析,集合了Thinking in C++、Effective C++等经典书籍的主要内容,实乃至宝啊本人对此文进行了研读,红色部分是我觉得重点的,

Sailor_forever 1091

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

高质量C++/C编程指南(第3章 命名规则) (转)

高质量C++/C编程指南(第3章 命名规则) (转)[@more@] ...

csd3176的博客 71

高质量C++/C编程指南

高质量C++/C编程指南文件状态[  ] 草稿文件[√] 正式文件[  ] 更改正式文件文件标识:当前版本:1.0作    者:林锐博士完成日期:2001年7月24日版本历史版本/状态作者参与者起止日期备注V 0.9草稿文件林锐2001-7-1至2001-7-18林锐起草V 1.0正式文件林锐2001-7-18至2001-7-24朱洪海审查V 0.

QQ125864255的专栏 2577

高质量C/C++编程指南

本文档参考《高质量C++ C编程指南》及自己的心得编写,如有侵权,立刻删除!定义文件有三部分内容:(1)定义文件开头处的版权和版本声明;(2)对一些头文件的使用;(3)程序的实现体(包括数据和代码)假设定义文件的名称为header.cpp,定义文件的结构参见如下://版权和版本说明见2.1.1,此处省略#include "header.h" //引用头文件...//全局函数的实现体...//类成员函数的实现体...

weixin_72852519的博客 3533

高质量C++/C 编程指南

高质量C++/C 编程指南                                                                                               目录 前 言.................................................................................

MENSA 的博客 2232
上一篇: 高质量C++/C编程指南(前 言)
下一篇: 高质量C++/C编程指南(第4章 表达式和基本语句)
icemanpro
博客等级 码龄25年 4粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值