1. 程式人生 > >淺談 if和assert的區別

淺談 if和assert的區別

assert

斷言(assert)的語義如下:

       如果表示式的值為0(假),則輸出錯誤訊息並終止程式的執行(一般還會出現提示對話方塊,說明在什麼地方引發了assert);如果表示式為真,則不進行任何操作。因此斷言失敗就表明程式存在一個bug。

     使用assert的目的是捕捉在執行時不應該發生的非法情況

if

語義:

        如果表示式的值為真,則執行其後的語句,否則不執行該語句。語句可以是單條語句,也可以是用花括號{}包括起來的複合語句。

        使用if語句的目的是對於條件判斷,滿足條件則執行其後的語句,不滿足則不執行該語句

區別:

1. assert語句僅僅在debug版本中才有效,而在release版本中無效;

       if(NULL!=p)是在Release版本中檢驗指標的有效性;

   2. assert一般用與檢查函式引數的合法性(有效性)而不是正確性,但是合法的程式並不見得就是正確的程式。

   3. if語句,簡單地說就是“漏斗”,滿足條件就進入,不滿足則不進入。而assert彷彿就是“城門守衛”,滿足條件就是進入城內(這裡就是接下來的程式),不滿足就阻止進入(程式中斷);

  4.assert這個巨集只是幫助我們除錯程式碼的,它的作用是:讓使用者在除錯函式的時候把錯誤排除掉,而不是等待Release之後。assert可以幫助定位錯誤,而不是排除錯誤;

一般用與檢查函式引數的合法性(有效性)而不是正確性,但是合法的程式並不見得

就是正確的程式。