c assert 歸納總結

2021-07-14 04:31:52 字數 1766 閱讀 3748

用法總結與注意事項:

1)在函式開始處檢驗傳入引數的合法性

如:

int resetbuffersize(int nnewsize)

2)每個

assert

只檢驗乙個條件

,因為同時檢驗多個條件時

,如果斷言失敗

,無法直觀的判斷是哪個條件失敗

不好: assert(noffset>=0 && noffset+nsize<=m_ninfomationsize);

好: assert(noffset >= 0);

assert(noffset+nsize <= m_ninfomationsize);

3)不能使用改變環境的語句,因為

assert

只在debug

個生效,

如果這麼做

,會使用程式在真正執行時遇到問題

錯誤: assert(i++ < 100)

這是因為如果出錯,比如在執行之前i=100,

那麼這條語句就不會執行,那麼

i++這條命令就沒有執行。

正確: assert(i < 100)

i++;

4)assert和後面的語句應空一行

,以形成邏輯和視覺上的一致感

5)有的地方

,assert

不能代替條件過濾

程式一般分為debug 

版本和release 

版本,debug 

版本用於內部除錯,

release 

版本發行給使用者使用。

斷言assert 

是僅在debug 

版本起作用的巨集,它用於檢查

「不應該

」發生的情況。示例

6-5 

是乙個記憶體複製函式。在執行過程中,如果

assert 

的引數為假,那麼程式就會中止(一般地還會出現提示對話,說明在什麼地方引發了

assert

)。

void *memcpy(void *pvto, const void *pvfrom, size_t size)

【規則6-5-1

】使用斷言捕捉不應該發生的非法情況。不要混淆非法情況與錯誤情況之間的區別,後者是必然存在的並且是一定要作出處理的。

【規則6-5-2

】在函式的入口處,使用斷言檢查引數的有效性(合法性)。

【建議6-5-1

】在編寫函式時,要進行反覆的考查,並且自問:

「我打算做哪些假定?

」一旦確定了的假定,就要使用斷言對假定進行檢查。

【建議6-5-2

】一般教科書都鼓勵程式設計師們進行防錯設計,但要記住這種程式設計風格可能會隱瞞錯誤。當進行防錯設計時,如果

「不可能發生

」的事情的確發生了,則要使用斷言進行報警。

assert巨集中應該包含的元素:

判斷條件;輸出當前斷言失敗的位置(檔案、行數等);返回錯誤;終止程式...

文章出處:

C ASSERT 斷言機制

c assert 斷言機制 assert 是乙個除錯程式時經常使用的巨集,在程式執行時它計算括號內的表示式,如果表示式為false 0 程式將報告錯誤,並終止執行。如果表示式不為0,則繼續執行後面的語句。這個巨集通常原來判斷程式中是否出現了明顯非法的資料,如果出現了終止程式以免導致嚴重後果,同時也便...

Select歸納總結

include include int select int maxfdpl,fd set readset,fd set write,fd set exceptset,const struct timeval timeout 返回值 該函式的返回值表示跨所有描述符集的已就緒的總位數。如果在任何描述符...

Poll歸納總結

include int poll struct pollfd fd,nfds t nfds,int timeout 返回 若有就緒操作符則為其數目。若超時則為0。若 出錯則為 1。第乙個引數是指向乙個結構陣列第乙個陣列元素的指標,每個陣列元素都是乙個pollfd結構,用於指定測試某個給定描述符發的的...