关于编程风格的讨论5

五、错误处理:

1、错误报告处理。

编程中要求考虑函数的各种执行情况,尽可能处理所有的流程情况。将函数分为两类:

一类为与屏幕的显示无关,(不与用户交换信息的函数)

一类为与屏幕的显示相关。(与用户交换信息的函数)

对于与屏幕显示无关的函数,函数通过返回值来报告错误。

对于与屏幕显示有关的函数,函数要负责向用户发出警告,并进行错误处理。

错误处理代码一般单独建立通用处理函数。如下:

void cmDeal_With_Error(long ErrCode)
{
switch(ErrCode)
{
case 1://注释
......
case 2://注释
......
default://注释
......
}
}

2、尽早发现程序中的错误:

①、重视编译器中的警告信息。

对于编译器产生的警告信息,我们应该引起足够的重视,实际上许多警告信息指示了程序中潜在的错误危险。所以我们要认真检查每一个警告信息,查看是否有某种隐患。尽量消除警告信息。

②、利用断言来检查错误

对于程序中的某种假设,或防止某些参数的非法值,利用断言来帮助查错是一种好的办法。

例如下面的函数:

long cmMemCpy(void * pvToMem, void* pvFromMem, size_t wSize)
{
……
if(pvToMem==NULL||pvFromMem==NULL)
{
lResult=CM _POINT_IS_NULL;
goto: END;
}
while(wSize-- >0)
{
*pvToMem++=pvFromMem++;
}
END:
return lResult;
}

采用判断可以检查传入的指针错误,但是这样的判断是程序最终的编译代码变大,同时降低了最终发布的程序的执行效率。由于传入空指针明显是调用这函数的程序的错误,而不是这个函数的错误,我们可以考虑采用断言来代替指针检查,即用

ASSERT( pvToMem!=NULL&&pvFromMem!=NULL)
代替
if(pvToMem==NULL||pvFromMem==NULL)
{
lResult=CM_POINT_IS_NULL;
goto: END;
}

这样只会在debug版中才会产生检查代码,而在正式发布版中不会带有这些代码。并且可以方便我们在程序调试中和测试时发现错误,同时又不影响程序的效率。

在下面的一些情况中必须加断言:

a、数的参数,特别是指针参数必须利用断言来进行确认。

b、利用断言检查程序中的各种假设的正确性。

c、在程序设计中不要轻易认为某种情况不可能发生,对你认为不可能发生的情况必须用断言来证实。

为了使程序中的断言发挥作用,所有用于在开发内部进行测试或调试的动态库、执行程序、组件必须采用debug版。

说明:

在程序效率要求较高、或者调用比较频繁的函数,对入口参数的错误检查,使用断言方式,其优点如上所叙,但其健壮性不强,所以在其他情况下,仍要求使用传统的检查方式,以增强程序的健壮性,当然,为了调试方便,可同时使用断言方式。

③、严格的测试:

对每一段代码都要求进行严格的测试,特别对一些功能函数要对其各种临界点(比如零值、无穷大的值等)进行测试。尽量做到每一段代码零错误。

时间: 2024-11-18 18:10:25

关于编程风格的讨论5的相关文章

关于编程风格的讨论1

**软件公司软件开发规范 (试行版) 在公司团队协作开发的情况下,编程时应该强调的一个重要方面是程序的易读性,在保证软件的速度等性能指标能满足用户需求的情况下,能让其他程序员容易读懂你的程序.一套鲜明的编程风格,可以让协作者.后继者和自己一目了然,在很短的时间内看清程序的结构,理解设计的思路.大大的提高代码的可读性.可重用性.程序健壮性.可移植性和可维护性. 制定本编程规范的目的是为了提高公司的软件开发效率及所开发的软件的可维护性,提高软件的质量.本规范由程序风格.命名规则.注释规范.程序健壮性

关于编程风格的讨论6

六.模块化规范: 为了提高软件的重用性,减少重复开发的工作量.同时也为了提高程序的可读性,方便程序的维护,必须加强软件的模块化工作.模块化应该遵循以下几个基本规范: 1. 个函数应该作到精而小,函数的代码应该控制在一个适度的规模,每个函数的代码一般不能超过150行,如果超过这个规模,应该进行模块化的工作.对于一些特殊的函数确实要超过150行,应该提交出来讨论,通过后,要求编写者更加详细的对函数注释,并写明函数超行的原因,以及设计思想等. 2. 某一功能,如果重复实现三遍以上,既应该考虑模块化,将

关于编程风格的讨论4

四.程序健壮性: 1.函数的返回值规范: 对于函数的返回位置,尽量保持单一性,即一个函数尽量做到只有一个返回位置.(单入口单出口). 要求大家统一函数的返回值,所有的函数的返回值都将以编码的方式返回. 例如编码定义如下: #define CM_POINT_IS_NULL CMMAKEHR(0X200) : : 建议函数实现如下: long 函数名(参数,--) { long lResult; //保持错误号 lResult=CM_OK; //如果参数有错误则返回错误号 if(参数==NULL)

关于编程风格的讨论3

三.注释规范: 1.函数头的注释 对于函数,应该从"功能","参数","返回值"."主要思路"."调用方法"."日期"六个方面用如下格式注释: //程序说明开始 //================================================================// // 功能: 从一个String 中删除另一个String. // 参数: strByDe

关于编程风格的讨论2

二.命名规则: 1.变量名的命名规则 ①.变量的命名规则要求用"匈牙利法则".即开头字母用变量的类型,其余部分用变量的英文意思或其英文意思的缩写,尽量避免用中文的拼音,要求单词的第一个字母应大写. 即: 变量名=变量类型+变量的英文意思(或缩写) 对非通用的变量,在定义时加入注释说明,变量定义尽量可能放在函数的开始处. 见下表: bool(BOOL) 用b开头 bIsParent byte(BYTE) 用by开头 byFlag short(int) 用n开头 nStepCount lo

《C++编程风格(修订版)》——3.1 编程风格示例:堆栈

3.1 编程风格示例:堆栈 C++编程风格(修订版)在程序清单3.1的程序中定义了一个用于处理字符堆栈的CharStack类,以及用于处理整数堆栈的IntStack类.我们将对这两个类进行分析和评价,并且判断这些类中的抽象是不是正确的.接口是否起到了相应的作用,以及类之间的继承关系是不是合适的. 有些读者在看到CharStack和IntStack时的第一反应可能是,这些类应该使用参数化类型来编写,这也是ANSI(参见Ellis和Stroustrup的著作,第341页)建议的方法.在这里我们暂时先

Google Java 编程风格指南

前言 这份文档是Google Java编程风格规范的完整定义.当且仅当一个Java源文件符合此文档中的规则, 我们才认为它符合Google的Java编程风格. 与其它的编程风格指南一样,这里所讨论的不仅仅是编码格式美不美观的问题, 同时也讨论一些约定及编码标准.然而,这份文档主要侧重于我们所普遍遵循的规则, 对于那些不是明确强制要求的,我们尽量避免提供意见. 1.1 术语说明 在本文档中,除非另有说明: 术语class可表示一个普通类,枚举类,接口或是annotation类型(@interfac

Google Java编程风格指南

作者:Hawstein出处:http://hawstein.com/posts/google-java-style.html声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0 ,转载请注明作者及出处. 目录 前言 源文件基础 源文件结构 格式 命名约定 编程实践 Javadoc 后记 前言 这份文档是Google Java编程风格规范的完整定义.当且仅当一个Java源文件符合此文档中的规则, 我们才认为它符合Googl

《C++编程风格(修订版)》——2.7 编程风格示例:第二种方法

2.7 编程风格示例:第二种方法 C++编程风格(修订版) 我们暂时先不去考虑去解决 string 类中的其他问题,而是将注意力转移到另一个不同的字符 串类.在这个类中,我们避免了大多数的上述问题.我们来分析程序清单 2.3 中的 SimpleString 类. 虽然 SimpleString 相对于 string 进行了改进,但仍然存在着一些缺陷. 程序清单 2.3 最初的 SimpleString 类 与 string 类一样,SimpleString 通过一个字符类型的指针 _string