当前位置: 首页 > news >正文

【高质量C/C++】3.命名规则

【高质量C/C++】—— 3. 命名规则

目录

  • 一、命名规则
  • 二、共性规则
  • 三、简单的Windows应用程序命名规则

一、命名规则

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

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

int i, j, k;
float x, y, z;

// 匈牙利法
int iI, iJ, iK;		// 以i为前缀
float fX, fY, fZ;	// 以f为前缀

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

根据考察,没有一个命名规则可以让所有的程序员赞同,程序设计教科书一般都不指定命名规则。命名规则对于软件产品而言并不是成败攸关的事,我们不必花太多精力试图发明世界上最好的命名规则,应制定一个让大多数程序员都满意的命名规则。

二、共性规则

共性规则是大多数程序员采纳的,我们应当先遵循共性规则前提下,在扩充特定的规则

规则

  1. 标识符的内容:
    1. 标识符直观并且可以拼读,可以望文知意。标识符最好采用英文单词或其组合,便于记忆和阅读。切记不要使用汉语拼音来命名。
    2. 变量的名字应使用名词,或者形容词+名词
    3. 全局函数的名字应使用动词或动词+名词,类的成员函数应当只使用动词,被省略的名词就是对象本身。
int age = 18;				// 年龄
int nianling = 18;			// 年龄,不良的风格

int newValue = 0;			// 变量名
int Add(int a, int b);		// 全局函数名
box->Draw()					// 类的成员函数
  1. 标识符的规则:
    1. 标识符长度应符合一个特定的范围。长标识符可以更好的表达大含义,但是过长的标识符也会影响阅读。单字符名字也是有的,如i、j、k、m、n、x、y、z等在特定场景下有特定含义的。
    2. 命名规则尽量与操作系统或开发工具的风格保持一致。如Windows应用程序的标识符通常采用大小写混排的方式,而Unix应用程序标识符通常采用小写加下划线的方式。
int maxVal = 10;				// 变量名
int maxValueUntilOverflow = 10;	// 过长的变量名

for (int i=0; i<n; i++)			// 单字符名字i
    ;

void AddChild(... ...);			// Windows标识符风格
void add_child(... ...)			// Unix标识符风格
  1. 多个标识符的命名规则:
    1. 程序中不要出现只靠大小写区分的相似的标识符
    2. 程序中不要出现标识符完全相同的局部变量和全局变量,尽管二者作用域不同而不会发生语法错误,但会使人误解
    3. 用正确的反义词组命名具有互斥意义的变量或相反动作的函数的。
    4. 尽量避免名字中出现数字编号,除非逻辑上需要编号,无意义的数字编号命名会严重影响阅读性
int x, X;				// 不良的风格,大小写不易区分

// 不良的风格,全局变量名和局部变量名冲突
int name;
void test(void)
{
    int name;
}

int max, min;			// 良好的风格

// 良好的风格
int SetValue(... ...);
int GetValue(... ...);

// 不良的风格
int value1;
int value2;
int value3;

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

规则

  1. 类名和函数名用大写字母开头的单词组合而成
  2. 变量和参数用小写字母开头的单词组合而成。
  3. 常量全用大写字母,用下划线分割单词。
  4. 静态变量加前缀s_
  5. 如果不得已要用全局变量,则全局变量前加前缀g_
  6. 类的数据成员加前缀m_,这样可以避免与成员函数的参数同名,但是对于现在这个时代,一般情况下我们在成员变量前加上_就可以了,对于一些特定的公司,也可能会要求你加在后面
  7. 为了防止软件库的标识符和其他软件库冲突,可以为各种标识符加上能反映软件性质的前缀。如三维图形标准OpenGL所有的库函数均以gl开头,所有常量均以GL开头
int g_value;					// 全局变量

class Node						// 类名
{
public:
    void SetValue(int value);
private:
    int _value;					// 成员变量
    bool _flag;
}

void Node::SetValue(int value)	// 函数名
{
    static int s_value;			// 静态变量
    
    const int MAX_LENGTH = 100;	// 常量
    
    bool flag;					// 变量
    int drawMode;
}

相关文章:

  • 湖仓一体电商项目(二十):业务实现之编写写入DM层业务代码
  • Msquic客户端详解
  • Eclipse Theia技术揭秘——构建桌面IDE
  • 交换机的构成以及其工作原理
  • 想换壁纸找不到高质量的?来这里用python采集上万张壁纸
  • Mybatis-Plus(核心功能篇 ==> 条件构造器
  • vue2.X+Cesium1.93Demo
  • 适配器模式【Java设计模式】
  • 聊一下接口幂等性
  • springboot源码理解十二、springMVC功能
  • 论文写作教程之学术论文中需要做好的10 件事
  • AutoAugment 学习
  • 产品经理认证(NPDP)—备考错题集二
  • R语言ggplot2可视化:使用ggpubr包的ggmaplot函数可视化MA图(MA-plot)、genenames参数配置点标签对应的基因名称
  • 程序兼容性的定义 windows7的兼容性
  • flask接收请求并推入栈
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • Java到底能干嘛?
  • JS学习笔记——闭包
  • leetcode-27. Remove Element
  • mysql 5.6 原生Online DDL解析
  • ng6--错误信息小结(持续更新)
  • react-native 安卓真机环境搭建
  • VuePress 静态网站生成
  • Vue小说阅读器(仿追书神器)
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 排序算法学习笔记
  • 前端技术周刊 2019-01-14:客户端存储
  • 深度学习中的信息论知识详解
  • Prometheus VS InfluxDB
  • 阿里云移动端播放器高级功能介绍
  • 大数据全解:定义、价值及挑战
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • ​LeetCode解法汇总518. 零钱兑换 II
  • (27)4.8 习题课
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (pytorch进阶之路)扩散概率模型
  • (二)windows配置JDK环境
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (十一)手动添加用户和文件的特殊权限
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)jdk与jre的区别
  • (转)mysql使用Navicat 导出和导入数据库
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .net 获取url的方法
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .NET/C# 的字符串暂存池
  • .php结尾的域名,【php】php正则截取url中域名后的内容
  • @Autowired和@Resource的区别
  • @德人合科技——天锐绿盾 | 图纸加密软件有哪些功能呢?
  • [ vulhub漏洞复现篇 ] Hadoop-yarn-RPC 未授权访问漏洞复现
  • [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(十)RCE (远程代码/命令执行漏洞)相关面试题
  • [20170705]lsnrctl status LISTENER_SCAN1
  • [AIGC] 如何建立和优化你的工作流?
  • [Asp.net MVC]Bundle合并,压缩js、css文件