文章目录
一、编码规范的目的
要求开发人员遵守编码规范,主要有以下目的:
- 规范部门内软件开发和设计风格,保证所有人写出过风格一致的代码
- 增强代码的健壮性、可读性和可维护性
- 减少程序的潜在错误
二、相关知识补充
1、32位机下C++中各变量占用的字节数
数据类型 | 字节数 |
---|---|
short | |
int | |
long | |
long long | |
float | |
double | |
char | |
指针 |
可以通过下面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、不要对浮点类型变量进行等于/不等于的判断
浮点类型存储小数是以近似相等的方式进行存储的,这其中存在精度问题。
如果要比较相等,只能用近似相等的方式,规定在某种精度内近似相等,这就需要两数之差的绝对值小于等于小于这个精度值。