2016-12-04 41 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

相關問題