开发管理之代码编码规范Word格式文档下载.docx

上传人:b****0 文档编号:13208742 上传时间:2022-10-08 格式:DOCX 页数:13 大小:22.14KB
下载 相关 举报
开发管理之代码编码规范Word格式文档下载.docx_第1页
第1页 / 共13页
开发管理之代码编码规范Word格式文档下载.docx_第2页
第2页 / 共13页
开发管理之代码编码规范Word格式文档下载.docx_第3页
第3页 / 共13页
开发管理之代码编码规范Word格式文档下载.docx_第4页
第4页 / 共13页
开发管理之代码编码规范Word格式文档下载.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

开发管理之代码编码规范Word格式文档下载.docx

《开发管理之代码编码规范Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《开发管理之代码编码规范Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。

开发管理之代码编码规范Word格式文档下载.docx

、-

++、

等前后不加空格

1.1.8.

像[]、“.”、一>等前后不加空格

1.12

1.121.

从左至右

!

-++--(类型)sizeof

+-*&

从右至左

*/%

+-

<

>

>

<

=>

=

==!

&

A

|

II

:

=+=-=*=/=%=&

=A=

|=<

=>

if语句

布尔变量与零值比较时,不可将布尔变量直接与TRUEFALSE或者1、0进行比较

假设布尔变量名字为flag,它与零值比较的标准if语句如下:

if(flag)

中,不需要对外公开的常量放在定义文件(*cPP)的头部

不能在类中初始化const常量,只能通过枚举常量来解决

错误:

classA

constintSIZE=100;

(intarray[SIZE];

}

正确:

{…

enum{SIZE1=100,SIZE2=200};

//intarray1[SIZE1];

intarray2[SIZE2];

};

错误)

枚举常量

1.2.

函数

参数规则

参数书写要完整,不能只写类型,不写参数名,如果函数没有参数,用

1.2.1.

1.2.1.1.

例如:

voidSetValue(intwidth,intheight);

voidSetValue(int,int);

floatGetValue(void);

floatGetValue();

void填充

1.2.1.2.

1.2.1.3.

1.2.1.4.

1.2.1.5.

1.2.1.6.

//

良好的风格不良的风格良好的风格不良的风格

如果参数是指针,且仅作输入用,则应在类型前加

被意外修改;

一般地,应将目的参数放在前面,源参数放在后面

例:

voidStrngCopy(char*strlDestintion,consthar*StrSource)

如果参数以值传递的方式传递对象,则宜改用“

避免函数有太多的参数,参数个数应尽量控制在

尽量不要使用类型和数目不确定的参数

intprintf(constcha*format[,argument]

对于内置类型参数要传值

const,以免指针在函数体内

const&

”方法传递,能提高效率

5个以内

…);

1.2.2.

1.2.2.1.

a)内部需要用NULL状态(引用没有NULL状态)

b)若参数是被new出来的,是将在函数内被释放

返回值规则

函数的输出值结果用输出参数(一般为指针)获得,状态用

return返回

如果返回一个对象,一般用引用传递,但有的情况下必须用值传递

1.2.2.2.

classString{

//赋值函数

String&

operate=(constString&

other);

//相加函数,如果没有friend修饰则只许有一个右侧参数

friendStringoperate+(constString&

s1,constString&

s2);

private:

char*m_data;

String的赋值函数operate=的实现如下:

String&

String:

operate=(constString&

other){

if(this==&

return*this;

deletem_data;

m_data=newchar[strlen+1];

strcpy(m_data,;

//返回的是*this的引用,无需拷贝过程

式,虽然功能仍然正确,但由于之中,增加了不必要的开销,

Stringa,b,c;

对于赋值函数,应当用“引用传递”的方式返回

return语句要把降低了赋值函数的效率。

String对象。

如果用“值传递”的方*this拷贝到保存返回值的外部存储单元例如:

a=b;

//

a=b=c;

//String的相加函数operate+

如果用

值传递”,将产生一次*this拷贝

值传递”,将产生两次*this拷贝

的实现如下:

Stringoperate+(constString&

s2){

Stringtemp;

delete;

//是仅含‘0'

的字符串=newchar[strlen+strlen+1];

strcpy,;

strcat,;

returntemp;

}

的方式返回String对象。

如果改用“引用传递”,那temp的“引用”。

由于temp在函数结束时被自动销毁,

c什么也得不到,流下了隐患。

对于相加函数,应当用“值传递”么函数返回值是一个指向局部对象将导致返回的“引用”无效。

c=a+b;

此时a+b并不返回期望值,

1.2.2.3.

尽量保持函数只有唯一出口

1.2.2.4.

若函数返回状态,尝试用枚举作类型

1.2.2.5.

当函数返回引用或指针时,用文字描述其有效性

1.2.2.6.

禁止成员函数返回成员的引用或指针

1.2.3.

1.2.3.1.

函数内部规则

在函数体的“入口处”,对参数的有效性进行检查,应正确使用断言(assert),

断言assert是仅在Debug版本起作用的宏,它用于检查“不应该”发生的情况例:

*memcpy(void*pvTo,constvoid*pvFrom,size_tsize)

void{

//使用断言pvTo的地址pvFrom的地址

//防止改变防止改变

assert((pvTo!

=NULL)&

(pvFrom!

=NULL));

byte*pbTo=(byte*)pvTo;

byte*pbFrom=(byte*)pvFrom;

//while(size-->

0)

*pbTo++=*pbFrom++;

returnpvTo;

1.2.3.2.

在函数的

出口处”,应对return语句的正确性和效率进行检查

1.2.3.3.

return语句不可返回指向“找内存”(内部变量)的指针或引用,因为该内存在函数体结束时被自动销毁

1.2.3.4.

要搞清楚返回的究竟是值、指针,还是引用

1.2.4.

1.2.4.1.

通用规则

函数的功能要单一,不要设计多用途函数

1.2.4.2.

1.2.4.3.

函数体规模要小,尽量控制在100行代码以内,不包括注释和空格行尽量避免函数带有记忆功能,相同的输入应当产生相同的输出(不用static变量)

示例:

如下函数,其返回值(即功能)是不可预测的。

unsignedintinteger_sum(unsignedintbase)

unsignedintindex;

staticunsignedintsum=0;

//注意,是static类型的。

//若改为auto类型,则函数即变为可预测。

for(index=1;

index<

=base;

index++)

sum+=index;

returnsum;

1.2.4.4.

用于出错处理的返回值一定要清楚

1.2.4.5.

a)

b)

c)

d)

引用的规则

引用被创建时同时被初始化

不能有NULL引用,引用必须与合法的存储单元关联一旦引用被初始化,就不能改变引用的关系引用的功能主要是传递参数和返回值

C++语言中,函数的参数和返回值的传递方式有三种:

值传递、指针传递和引用传递。

以下是“值传递”的示例程序。

由于Func1函数体内的x是外部变量n的一份拷贝,改变x的值不会影响n,所以n的值仍然是0。

voidFunc1(intx)

x=x+10;

intn=0;

Func1(n);

//n=0

cout<

“n=”<

n<

endl;

以下是“指针传递”的示例程序。

由于改变该指针的内容将导致n的值改变,所以

Func2函数体内的x是指向外部变量n的指针,n的值成为10。

voidFunc2(int*x)

(*x)=(*x)+10;

Func2(&

n);

“n=”<

//n=10

以下是“引用传递”的示例程序。

由于

n是同一个东西,改变x等于改变n,所以

voidFunc3(int&

x)

Func3函数体内的x是外部变量n的引用,n的值成为10。

Func3(n);

对比上述三个示例程序,会发现“引用传递”的性质象“指针传递”,而书写方式象传递”。

实际上“引用”可以做的任何事情“指针”也都能够做,为什么还要“引用”这东西

就象

答案是“用适当的工具做恰如其分的工作”。

指针能够毫无约束地操作内存中的如何东西,尽管指针功能强大,但是非常危险。

一把刀,它可以用来砍树、裁纸、修指甲、理发等等,谁敢这样用如果的确只需要借用一下某个对象的“别名”,那么就用“引用”,而不要用“指针”,以免发生意外。

比如说,某人需要一份证明,本来在文件上盖上公章的印子就行了,如果把取公章的钥匙交给他,那么他就获得了不该有的权利。

2.

内存管理

2.1.

内存分配方式

有三种分配方式

(1)

2.2.

常见的内存错误

静态存储区分配,内存在编译的时候已经分配好,这块内存在整个运行期间都存在,例如全局变量,static变量

在栈上创建,执行函数时,函数内部局部变量都在栈上创建,函数执行结束时,这些存储变量自动被释放从堆上分配,亦称动态内存分配,程序运行时用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存

1)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 专升本

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1