事实上,我们可以捉到几乎所有的假设,需要在三个地点进行检查:
当一个函数被调用,用户可以通过在语义上毫无意义的函数参数。
当一个函数返回,返回值可能表明发生了一个错误。
当程序接收输入(无论是从用户,或文件),输入不正确的格式。
因此,下列规则时应使用编程的防守:
在每个函数前,检查以确保任何参数的适当的值。
在一个函数被调用,检查它的返回值(如果有),以及任何其他的错误报告机制,看是否发生了一个错误。
验证用户输入,以确保其符合预期的格式或范围标准。
1
2
3
4
5
6
7
8
9
10
|
char
strHello[] =
"Hello, world!"
;
int
nIndex;
do
{
std::cout <<
"Enter an index: "
;
std::cin >> nIndex;
}
while
(nIndex < 0 || nIndex >=
strlen
(strHello));
std::cout <<
"Letter #"
<< nIndex <<
" is "
<< strHello[nIndex] << std::endl;
|
唱一个条件语句来检测违反假设,随着印刷错误信息并终止程序是这样一个共同的响应问题,C++提供了一种快捷方法这样做。此快捷方式被称为一个断言。
Assert语句是一个预处理宏计算条件表达式。如果条件表达式为真,assert语句不。如果条件表达式的值为false,则显示错误信息并终止程序。这个错误消息包含条件表达式失败,随着代码的文件名和行号的断言。这使得它告诉问题不仅是很容易的,但在代码中发生的问题。这可以帮助调试的努力非常。
Assert功能生活在cassert头,常被用来检查传递给函数的参数是有效的,并检查一个函数调用的返回值是有效的。