2016-12-04 33 views
-1

我总是看到某种这一说法的变化:什么时候应该使用if(!someVar)vs assert()?

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

中的代码。我的问题是什么时候应该有人青睐这种通过assert()检查错误的方法?什么是一些具体的例子?在我看来,assert()在大多数情况下可能是更安全的选择,因为您应该经常问自己,为什么首先将空或错误的值传递给变量。有鉴于此,您是否应该使用if(!expr)语句?

对于背景我在C++,并与报头ASSERT.H具体工作。如果发生错误,

+1

'断言()'在调试版本并停止该程序仅执行。在发布版本中不进行检查。因此'assert()'用于完整性检查,但不适用于程序逻辑。请参阅:https://stackoverflow.com/questions/1571340/what-is-the-assert-function – Galik

回答

1

在你提供的程序员检查someVar,并改变它,如果someVar计算结果为布尔值false的代码示例。在错误检查的概念中,您可以考虑这是一个可恢复的错误(错误可以通过更改someVar的值来解决)

使用Assert,您声明someVar必须为真,或者出现错误你无法从中恢复。通常这只能在调试版本中运行,并且如果条件为假,程序将退出。

0

好,assert会使程序崩溃。但是,你并不总是想要那样。例如,您可能想要打开一个对话框,告诉用户有关错误的信息,并为他们提供保存工作的机会。

的错误处理通常的选择是抛出一个异常。例外的是伟大的,因为他们可以抓到,但如果他们没有被卡住,他们仍然崩溃的程序就像一个assert

+4

请注意,通常'assert'在发布版本中是无操作的。 – juanchopanza

+0

_“如果他们没有被发现,他们仍然像程序断言一样崩溃程序”_这不是“好” –

+0

大多数人会说这是。它至少比C错误处理好,如果你不处理错误,什么都不会发生,1000行后你的程序做错了事,没有任何迹象表明为什么。 – IanPudney

相关问题