实际开发的代码规范

一、关于#pragma pack(n)

不同平台上的编译器都有自己的默认“对齐系数”,也称对齐模数。程序员可以通过预编译命令#pragma pack(n),n=1,2,4,8,16来改变这一系数,其中的n就是你要指定的“对齐系数”。

windows(32)/VC6.0下,n的取值可以为1248,默认情况下为8。在linux(32)/GCC下,n的取值只能为124,默认情况下为4

pack后面的n值,就是结构体对齐规则里面的对其系数。

#pragma pack(n)使用情景有牵扯到网络协议方面,或者存盘数据,其作用就是:保证在不同的平台下面,所定义的结构大小是一致的。

二、尽可能使用定长的数据类型

因为牵扯到平台移植的问题,为了尽可能的避免不同的数据类型在不同的平台中数据大小不一样,比如:char类型数据在32位和64位系统中都是8位,但是long在32位中大小是:32位,在64位的系统中是64位,使用char类型就可以更大限度避免平台不同而引起的问题。

三、goto语句的使用

尽管在课本中多次提到goto语句会让程序显的杂乱无章,但是通常情况下,在实际的开发过程中,函数要保证单入口单出口,也就是只有一个return语句兰进行结果的返回。

普遍函数程序:

bool function(int a,int b)
{
	if(a < 0 || b<0)
	{
		return false;
	}
	int c = a*b;
	if(c <=0)
	{
		return false;
	}
	return true;
}

每一次判断之后结果或者参数是否合法之后,就会有一个包含有return关键字条件判断,这样程序就会有很多出口,如果出现错误就会很难排查。

但是使用goto语句之后:

void  Error_Check(int ret)
{
	if(ret == false)
		goto:Exit0;
}

bool function(int index1,int index2)
{
	Error_Check(index1 || index2 );
	int cnt = index1*index2;
	Error_Check(cnt);
Exit0:
	return false;
}

我们将错误检测封装起来,在错误检测中,如果我们有检测到错误,我们可以生成日志或者打印,然后使用goto语句直接跳转,这样,所有的错误检测之后的返回处理都会在Exit0处执行。保证了函数的单出口,代码也会更简洁。

四、函数的返回值

开发过程中返回值通常设定为bool变量,因为bool变量只有两个值:true和false,也就是执行成功或者失败。通常会设置成int,因为int里面。如果返回:1代表一种情况,返回:2又代表一种情况,而我们使用bool之后,所有的情况我们都会在函数的内部处理,参数也会设置称输出型参数,这样外部接受的结果就只有正确与否。

五、初始化

变量的定义和初始化都会放在开始,中间是数据的处理,最后是错误的处理和返回,大概结构如下:

 bool function()
 {
	 //变量的初始化
	 ...


	//数据的处理
	...


	//错误的处理以及返回
	...
	return true;
 }	

六、类里面函数声明放在.h文件,函数的具体实现放在.cpp文件

    实际开发过程中,一个类里面的类成员函数可以有很多,所以如果没有声明的话,可读性不是很好,因为如果非开发者使用这个类,可能他并不需要了解函数里面是怎么声明的,只需要使用和得到返回值就行,所以声明和实现是分开的。

    声明放在.h文件中的话,编译器可以实现优化。

    如果有情况我们会把实现就放在.h文件中,有可能是因为函数功能过于简单,或者是语法规定不允许分开,比如:模板类

七、接口和实现分开

    通常在开发出功能齐全的成品的时候,我们可能只是希望使用者我们提供的功能,并不希望其看到内部的结构或者源代码。所以此时我们将借口和实现分开,使用的时候只需提供一套借口就行。

    这样子也比较符合:高内聚,低耦合的编程思想。

八、尽量少的使用宏,最好使用公共函数

如果使用的宏过多的话,最大的问题就时调试起来特别困难,不方便维护。

猜你喜欢

转载自blog.csdn.net/dy_1024/article/details/80997065