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);