Linux下的代码淬火技术
作者: 出处:it168.com 更新时间:2007-09-03 责任编辑:liuhao
 
 

2.检验返回值

现在,软件中最常见的错误是忽略了返回值的检验。许多程序员在调用系统函数或用户自定义的函数后,通常会盲目乐观地认为这些函数会成功的执行。当我们打造经淬火处理的软件时,应当检查返回值,并且在返回失败时,还要进行妥善处理。比如:

ret = printf( "Current value is %d\n", value );
if ( ret < 0 ) {
ret = printf( "An error occured emitting value.\n" );
}

3.检查输入/输出数据

当我们开发应用时,无论涉及到用户的输入,或者是通过网络进行输入,一定要严密关切输入数据的情况:比如对于给定的操作数据是否充分,或者收到的数据是否超过了预留的缓冲区空间。

4.为分支语句提供备选方案

对于switch语句来说,常常会遗漏default部分,这会导致无法预料的后果。举例来说:

switch( mode ) {
case OPERATIONAL_MODE:
/* 切换到运行模式进行处理 */
break;
case BUILT_IN_TEST_MODE:
/* 切换到测试模式进行处理*/
break;
}

假设现在我们又添加了一种模式,但是上面的代码段没有及时得到更新,这时如果执行了这段代码,执行结果将无法预料。如果包括default部分,至少也能利用该部分在出现问题时通知调用者,即使在此放一个assert,也能在调试时捕获当时的状况。如下例所示:

switch( mode ) {
case OPERATIONAL_MODE:
/*切换到运行模式进行处理 */
break;
case BUILT_IN_TEST_MODE:
/* 切换到测试模式进行处理 */
break;
default:
assert(0);
break;
}

上述问题除了存在于switch语句外,还存在于if/then/else分支语句中。下面分别举例说明:

float coefficient = 0.0;
if (state == FIRST_STAGE) coefficient = 0.75;
else if (state == SECOND_STAGE) coefficient = 1.25;

作者的意图很明显,它是希望根据变量state的值的不同,也让变量coefficient取不同的值。但是如果变量state的值被破坏(比如遇到上面提到的缓冲区溢出的破坏),或者使它取了一个预期之外的值,那么变量coefficient的值就会一直是0.0。如果这是用来计算付费的话,后果的严重可想而知。因此,else分支语句至少应该包含一个分支用来捕获错误,例如:

float coefficient = 0.0;
if (state == FIRST_STAGE) coefficient = 0.75;
else if (state == SECOND_STAGE) coefficient = 1.25;
else coefficient = SAFE_ COEFFICIENT;

尽管许多情况下尾随的else分支不是必须的,但这样做无疑为我们的代码加了一把保护伞,以免铸成大错。

 
     
 
 
后退<<上一页 继续>>下一页
[上一页][第1页][第2页][第3页][第4页][第5页][第6页][第7页][下一页]
 
内容导航  
第1页Linux下的代码淬火技术.. 第2页Linux下的代码淬火技术..
第3页Linux下的代码淬火技术.. 第4页Linux下的代码淬火技术..
第5页Linux下的代码淬火技术.. 第6页Linux下的代码淬火技术..
第7页Linux
上一篇 : 熟悉五笔有妙招利用反查.. 下一篇奇虎呼吁举证CNNIC CNNI..
 
  您要为所发表的言论的后果负责,请各位遵纪守法并注意文明用语
标题:  

[ 关于本站 ] [ 广告服务 ] [ 商务合作 ] [ 联系我们 ] [ 合作伙伴 ] [ 法律顾问 ] [ 网站地图 ]
千橡公司 京ICP证041489号 Copyright (c) 1997-2007 All Right Reserved.