2018-10-26

assert 動(dòng)態(tài)斷言

    #include <assert.h>
    void assert(int expression)

assert的原型定義在 <assert.h>中,其作用是如果它的條件返回錯(cuò)誤,則終止程序執(zhí)行。

  • C++ assert()函數(shù)的作用是先計(jì)算表達(dá)式expression, 如果其值為假(即為0),那么它先向stderr打印一條出錯(cuò)信息,然后通過(guò)調(diào)用abort來(lái)終止程序運(yùn)行。
  • assert(fin!=NULL && fout!=NULL); 表示在debug模式下,當(dāng)fin或者fout其中一個(gè)為空時(shí),程序就會(huì)被中斷并退出。
  • 頻繁調(diào)用其會(huì)增加額外開銷,影響程序性能;在調(diào)試結(jié)束后,可在包含#include <assert.h>的語(yǔ)句之前插入#define NDEBUG來(lái)禁用assert調(diào)用。(不過(guò)只有assert只在debug版本才能生效,發(fā)行版本都是release版。)

靜態(tài)斷言 static_assert

現(xiàn)行許多編譯器不支持,略過(guò)。

斷言用法總結(jié)與注意事項(xiàng):

  1. 在函數(shù)開始處校檢傳入?yún)?shù)的合法性
assert(nSize >= 0);
  1. 每個(gè)assert只校檢一個(gè)條件,因?yàn)橥瑫r(shí)校檢多個(gè)條件時(shí),如果斷言失敗,無(wú)法直觀判斷是哪個(gè)條件失?。?/li>
assert(nSize >= 0);
assert(nSize <= MaxSize);
  1. 不能使用改變環(huán)境的語(yǔ)句,因?yàn)閍ssert只在DEBUG中生效,如果這么做,會(huì)使程序真正運(yùn)行時(shí)遇到問(wèn)題:
    錯(cuò)誤:
    assert(i++ < 100);
    正確:
    assert(i < 100);
    i++;
  1. assert和后面的語(yǔ)句應(yīng)空一行,力求規(guī)范
  2. 注意,assert有時(shí)候并不能替代條件過(guò)濾。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容