我应该什么时候使用(!somevar)vs essert()

When should I use if(!someVar) vs assert()?

本文关键字:什么时候 vs essert somevar 我应该      更新时间:2023-10-16

我总是看到此语句的某种变体:

if(!someVar)// or whatever expression
{
   someVar = new type; //or however the programmer wants to handle it
}

在代码中。我的问题是,何时应该偏爱这种错误检查方法()?哪些具体例子?在我看来,断言()可能是大多数时候的更安全的选择,因为您通常应该问自己为什么首先将无效或错误的值传递给了变量。然后,您是否应该使用IF(!expr)语句?

对于背景,我专门在C 和sustert.h标题中工作。

在您提供的代码示例中,程序员正在检查某个Var,如果SomeVar评估了Boolean false,则将其更改。在错误检查的概念中,您可以认为这是一个可恢复的错误(可以通过更改某些Var的值来解决错误)

有了断言,您正在陈述某个Var必须是真实的,否则您无法从中恢复过的问题。通常,这仅在调试构建中运行,如果条件为false,则该程序将退出。

好吧,如果发生错误,assert将崩溃程序。但是,您并不总是想要那个。例如,您可能想打开一个对话框,该对话框告诉用户一个错误,并使他们有机会保存他们的工作。

错误处理的常见选择是抛出异常。例外很棒,因为它们可以抓住,但是如果没有抓住,它们仍然像assert一样崩溃该程序。