【发布时间】:2010-10-29 05:55:59
【问题描述】:
断言用于检查是否满足条件(前置条件、后置条件、不变量),帮助程序员在调试阶段发现漏洞。
例如,
void f(int *p)
{
assert(p);
p->do();
}
我的问题是我们是否需要假设在发布模式下无法满足条件并相应地处理案例?
void f(int *p)
{
assert(p);
if (p)
{
p->do();
}
}
毕竟,断言意味着它测试的条件绝不应该为假。但是,如果我们不检查它并且它失败了,程序就会崩溃。听起来是个两难的选择。大家是怎么处理的呢?
【问题讨论】:
-
复制design by contract tests by assert or by exception?(关于不同方法的优缺点有很多很好的讨论;关于这个主题并没有真正达成共识)另见When should assertions stay in production code?
-
我认为我从未见过一个问题在如此短的时间内得到如此多的回复。
-
是的,每一个都互相矛盾:)
-
@James:谢谢,我会看看那些参考资料:)