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

一、编码规范的目的

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

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

二、相关知识补充

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

数据类型 字节数
short 2 2
int 4 4
long 4 4
long long 8 8
float 4 4
double 8 8
char 1 1
指针 4 4

可以通过下面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;       // fa
	cout << hex << uiValueTest1 << endl;  // f
	cout << hex << uiValueTest2 << endl;  // fa
	cout << hex << uiValueTest3 << endl;  // 0

	return 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、不要对浮点类型变量进行等于/不等于的判断

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

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

发布了49 篇原创文章 · 获赞 9 · 访问量 3121

猜你喜欢

转载自blog.csdn.net/qq_44220418/article/details/104539509
今日推荐