文章目录

  • 一、编码规范的目的
  • 二、相关知识补充
    • 1、32位机下C++中各变量占用的字节数
    • 2、按位操作
  • 三、规范事项
    • 1、把常量放在==左边
    • 2、按位位移操作的右操作数必须小于操作的位数
    • 3、不要对有符号的类型进行按位操作
    • 4、不要在逻辑运算符[&&、||]的右操作数中出现自增、自减运算和函数调用
    • 5、不要将两个整型变量相除的结果赋值给浮点类型变量
    • 6、不要在逻辑表达式中使用自增自减运算符
    • 7、不要在逻辑表达式中出现赋值语句
    • 8、清晰表示不同类型变量与0的比较
    • 9、不要对浮点类型变量进行等于/不等于的判断

一、编码规范的目的

要求开发人员遵守编码规范,主要有以下目的:

  • 规范部门内软件开发和设计风格,保证所有人写出过风格一致的代码
  • 增强代码的健壮性、可读性和可维护性
  • 减少程序的潜在错误

二、相关知识补充

1、32位机下C++中各变量占用的字节数

数据类型 字节数
short 222
int 444
long 444
long long 888
float 444
double 888
char 111
指针 444

可以通过下面sizeof运算符来查看相应数据类型占用的字节数,如:

cout << sizeof(int) << endl;

指针类型的变量存储的是地址,任何类型的指针大小都一样,为4字节(32位机下)

2、按位操作

按位操作 运算符
按位与 &
按位或 |
按位取反 ~
按位异或 ^
按位左移 <<
按位右移 >>

按位操作的一个应用就是文件流同时以读写模式打开文件,读写模式可以用读的模式和写的模式进行按位或实现。

三、规范事项

1、把常量放在==左边

常量不是一个L-Value(左值),不可以被修改,如果将==错写为=,也会很快发现。

#include <iostream>using namespace std;int main()
{int iValue = 3;if (4 == iValue)cout << iValue << endl;return 0;
}

2、按位位移操作的右操作数必须小于操作的位数

此规则应用于32位操作系统中,移位位数超过32位之后,数值不会是0

#include <iostream>using namespace std;int main()
{unsigned uiValue = 0xfa;unsigned uiValueTest1 = uiValue >> 100;unsigned uiValueTest2 = uiValue >> 32;unsigned uiValueTest3 = uiValue >> 31;cout << hex << uiValue << endl;       // facout << hex << uiValueTest1 << endl;  // fcout << hex << uiValueTest2 << endl;  // facout << hex << uiValueTest3 << endl;  // 0return 0;
}

3、不要对有符号的类型进行按位操作

有符号类型的变量进行按位操作往往会出现很多问题。

4、不要在逻辑运算符[&&、||]的右操作数中出现自增、自减运算和函数调用

逻辑与、逻辑或,存在短路机制。如果只判断部分表达式中前某一部分就能知道整个表达式的值,后面的部分便不会再执行。

5、不要将两个整型变量相除的结果赋值给浮点类型变量

两个整数相除结果仍然为整数,会丢失小数部分。

6、不要在逻辑表达式中使用自增自减运算符

提高可读性,避免出错。

7、不要在逻辑表达式中出现赋值语句

提高可读性,避免出错。

8、清晰表示不同类型变量与0的比较

提高可读性,避免出错。

具体比较可参考以下代码:

#include <iostream>using namespace std;int main()
{int iValue = 10;bool b = false;int* piValue = NULL;if (0 == iValue)cout << "判断整型值是否为0" << endl;if (b)cout << "判断bool值是否为真" << endl;if (NULL == piValue)cout << "判断指针是否为空" << endl;return 0;
}

9、不要对浮点类型变量进行等于/不等于的判断

浮点类型存储小数是以近似相等的方式进行存储的,这其中存在精度问题。

如果要比较相等,只能用近似相等的方式,规定在某种精度内近似相等,这就需要两数之差的绝对值小于等于小于这个精度值。

《编码规范和测试方法——C/C++版》学习笔记 ·001相关推荐

  1. 《编码规范和测试方法——C/C++版》作业 ·003——宏定义作用整理、设计删除数组元素的函数

    文章目录 一.宏定义(#define)的作用 1.普通宏 2.带参宏 [注]:特殊用法 3.其他用法和注意点 二.实际问题(函数设计) 1.原题 2.题解参考 (1).面向过程的设计 (2).面向对象 ...

  2. 《编码规范和测试方法——C/C++版》学习笔记 ·002

    文章目录 一.相关知识补充 1.switch接受的参数类型 2.内存分区与数据存放 3.变量的作用域与生命期 4.调试开关的使用 二.规范事项 1.杂项 (1).for循环语句中只出现影响循环控制的变 ...

  3. 《编码规范和测试方法——C/C++版》作业 ·008——编写一个符合依赖倒置原则的简单学生管理系统

    文章目录 问题描述 参考解答 整体架构 UML图 整体代码 MySQL-C-API封装 Model层 Dao层 Service层 Controller层 View层 主程序 测试环境 测试流程 测试效 ...

  4. 《编码规范和测试方法——C/C++版》作业 ·007——C++引入MySQL给C的API并简单封装

    文章目录 问题描述 参考解答 API引入 API测试 一些问题 封装代码 测试环境 测试代码 测试结果 问题描述 使用MySQL为C提供的API,封装出一个访问MySQL数据库的类.要求至少能实现如下 ...

  5. 《编码规范和测试方法——C/C++版》作业 ·006——设计模式 · 模板方法

    文章目录 一.设计模式-模板方法 1.简单介绍 2.框架演示 3.实际案例 一.设计模式-模板方法 1.简单介绍 简单来说,就是先在父类FFF中定义好一个函数AAA,然后这个函数AAA代表了一个操作M ...

  6. 《编码规范和测试方法——C/C++版》作业 ·005——设计一组员工类

    问题描述 Cola公司的雇员分为以下若干类:ColaEmployee :所有员工总的父类属性:员工的姓名,员工的生日月份方法:getSalary(int month) 根据参数月份来确定工资,如果该月 ...

  7. 《编码规范和测试方法——C/C++版》作业 ·004——设计一个顺序表

    问题描述 实现一个能够实现自动扩容ArrayList类的封装(不使用C++容器),主要至少具有增加.删除.求长的功能 参考解答 ArrayList.h文件 #ifndef ARRAYLIST_H #d ...

  8. 《编码规范和测试方法——C/C++版》作业 ·002——函数返回地址、static关键词用法整理

    文章目录 一.函数返回地址的情形 1.函数返回值为指针 二.static关键字用法整理 1.static全局变量 2.static局部变量 3.static函数 4.类的static成员数据 5.类的 ...

  9. C++Primer第5版学习笔记(一)

    C++Primer第5版学习笔记(一) 第一.二章的重难点内容        这个笔记本主要记录了我在学习C++Primer(第5版,中文版)的过程中遇到的重难点及其分析.因为第一.二章都比较简单,因 ...

最新文章

  1. 软件测试职业培训中心,软件测试工程师就业班
  2. 详细讲解MapReduce二次排序过程
  3. numpy中的ogrid
  4. Java单向链表操作详解
  5. 数据中台实战入门篇:数据中台对内、对外合作机制
  6. Jar文件的小小总结(原创)
  7. Ubuntu增加(swap)交换分区
  8. spring 配置jdbc/hibernate/jpa
  9. 两台服务器虚拟成一个ip地址,两台服务器如何用一个ip地址
  10. char、varchar、nchar、nvarchar的区别
  11. Failedto load class org.slf4j.impl.StaticLogger...
  12. 无代码时代来临,程序员如何保住饭碗?赶紧看一看!
  13. NYOJ 取石子总结
  14. 剑指MBA?Acer发布全高清触控Win8平板Aspire S7
  15. 计算机技术和信息技术结合,浅谈通信技术与计算机技术融合发展
  16. 2020年6月——北京大学《软件工程》笔记
  17. 秒懂SpringBoot之Spring对象生命周期与扩展点浅尝辄止
  18. 楼宇能效控制器真的有用吗
  19. php采购管理系统,企业采购管理系统设计与实现.doc
  20. ocr识别软件测试点,屏幕取词和OCR取词测试

热门文章

  1. springboot 使用restTemplate 发送https请求 忽略ssl证书
  2. 正常的vite创建项目并且安装vue router,vant的代码示例
  3. ajax中get请求获取数据
  4. 京东app html源码_哔哩哔哩源码泄露,看不懂怎么办?
  5. 石河子大学计算机类学什么,石河子大学有哪些专业好,2021年石河子大学各专业排名...
  6. 新版手机浏览器_Firefox手机浏览器app下载安装_Firefox手机浏览器软件最新版免费下载...
  7. 力扣每日一题 2021.10.23
  8. 中文信息处理——语料划分测试集与训练集
  9. Windows运维的学习笔记
  10. Tensorflow异常集锦