assert()詳解

來源:互聯網
上載者:User
assert()是什嗎?
assert的標頭檔是assert.h 使用方式:assert( expression ); 當expression為FALSE時,程式將會終止,並且會彈出expression的資訊。光這樣說可能不太清楚。 for example
assert(length >= 0);//當length小於0時,程式將會終止,並彈出Assersion failed: lenght >= 0的資訊提示這邊出了錯誤。也即告訴程式員length不是非負數。
當然你也可以添加更多的出錯顯示資訊,如
assert(length >= 0 && "length can't possibly be negative");
或者
assert(("length can't possible be negative", length >= 0));
assert()有什麼用?assert可以這樣通俗的理解:我要確保expression正確,但如果不正確程式你就停止運行吧,然後告訴我。1. assert 可以在函數開始時檢驗參數的合法性
int resetBufferSize(int nNewSize){  //功能:改變緩衝區大小,  //參數:nNewSize 緩衝區新長度  //傳回值:緩衝區當前長度   //說明:保持原資訊內容不變     nNewSize<=0表示清除緩衝區  assert(nNewSize >= 0);  assert(nNewSize <= MAX_BUFFER_SIZE);  ...}
assert()有什麼注意點由於assert()是在調試狀態下啟動並執行,其開銷還是蠻大的,因此待調試完程式後可以選擇關閉assert,這個可以這樣做
#define NDEBUG#include <assert.h>

即在assert.h前添加NDEBUG。

基於你的程式最終是在assert關閉狀態下啟動並執行,你的程式設計將不能依賴於assert()函數,不然將會出現與你所想的截然不同的程式運行結果。例如
length = 100;assert(length++);

這時候在assert()開啟和assert()被關閉兩種狀態下,程式的執行結果將有可能完全不同,因此這是一個bad的設計。

又如
assert(foo());

此處程式運行依賴於foo();

可以改成
int ret = foo();assert(ret);

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.