防御式编程介绍

简介: 防御式编程介绍

防御式编程(Defensive Programming)是提高软件质量的辅助手段怎么理解呢?防御式编程思想的理解可以参考防御式驾驶


在防御式驾驶中要建立这样一种思维,那就是你水远也不能确定另一位司机将要做什么。这样才能确保在其他人做出危险动作时你也不会受到伤害。你要承担起保护自己的责任,哪怕是其他司机犯的错误。


核心思想:子程序应该不因传入错误数据而被破坏,哪怕是由其他子程序产生的错误数据。这种思想是将可能出现的错误造成的影响控制在有限的范围内。


具体措施:


1. 对输入进行体检

       1)检查输入源(如:文件,网络、控制台等)数据的合法性


       2)检查每一个函数输入参数的合法性处理方式:一旦非法输入被发现,那么应该根据情况进行处理11。防御式编程的最佳的形式是在一开始就不引入错误。


      2. 对非预期错误使用断言

1)空指针。


2)输入或者输出参数的值不在预期范围内。


3)数组的越界


处理方式:如果断言的条件返回错误,则终止程序执行。


原型定义:


#include <assert.h>


void assert( int expression );


assert 的作用是先计算表达式 expression ,如果其值为假(即为 0),那么它先向 stderr 打印一条出错信息,


然后通过调用 abort 来终止程序运行。

bool isPeak(int grid[N][N], int r, int c){ assert( 0<r && r<N-1); assert( 0<c && c<N-1);
if((grid[r][c] > grid[r-1][c])&&
(grid[r][c] > grid[r+1][c])&&
(grid[r][c] > grid[r][c-1])&&
(grid[r][c] > grid[r][c+1])){ return true;
}else{ return false;
}
}


相关文章
|
11月前
|
算法
地震监测系统
地震监测系统
|
11月前
|
SQL 关系型数据库 MySQL
列的完整性约束——设置表字段值自动增加(AUTO_INCREMENT)
列的完整性约束——设置表字段值自动增加(AUTO_INCREMENT)
|
11月前
|
Linux Windows
逼格提升:内存泄漏检测工具
逼格提升:内存泄漏检测工具
|
11月前
|
数据库 索引
表索引——索引的设计原则
前言 为了使索引的使用效率更高,在创建索引时,必须考虑在哪些字段上创建索引和创建什么类型的索引。本节将介绍一些索引的设计原则。
|
11月前
|
存储 SQL 关系型数据库
MySQL 数据表操作
MySQL 数据表操作
|
11月前
|
SQL 存储 关系型数据库
MySQL 数据库操作
MySQL 数据库操作
|
11月前
|
SQL 关系型数据库 MySQL
列的类型定义——整形类型
列的类型定义——整形类型
|
11月前
|
算法
二叉树的递归遍历(力扣刷题)
二叉树的递归遍历(力扣刷题)
|
11月前
|
Python
Python——分支语句
Python——分支语句
|
11月前
|
容器
前 K 个高频元素(力扣刷题代码随想录刷题)
前 K 个高频元素(力扣刷题代码随想录刷题)

热门文章

最新文章