assert用法總結

2021-07-29 19:31:35 字數 1665 閱讀 6136

原文 :

assert巨集的原型定義在中,其作用是如果它的條件返回錯誤,則終止程式執行,原型定義:

#include 

<

assert.h

>

void

assert(

intexpression );

assert的作用是現計算表示式 expression ,如果其值為假(即為0),那麼它先向stderr列印一條出錯資訊,然後通過呼叫 abort 來終止程式執行。請看下面的程式清單badptr.c:

#include 

<

stdio.h

>

#include

<

assert.h

>

#include

<

stdlib.h

>

intmain(

void

)

[root@localhost error_process]# gcc badptr.c 

[root@localhost error_process]# ./a.out 

a.out: badptr.c:14: main: assertion `fp' failed.

已放棄使用assert()的缺點是,頻繁的呼叫會極大的影響程式的效能,增加額外的開銷。在除錯結束後,可以通過在包含#include 的語句之前插入 #define ndebug 來禁用assert呼叫,示例**如下:

#include 

<

stdio.h

>

#define

ndebug

#include

<

assert.h

>

用法總結與注意事項:

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

int

resetbuffersize(

intnnewsize)

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不能代替條件過濾。

assert用法總結

assert巨集的原型定義在中,其作用是如果它的條件返回錯誤,則終止程式執行,原型定義 include void assert int expression assert的作用是現計算表示式 expression 如果其值為假 即為0 那麼它先向stderr列印一條出錯資訊,然後通過呼叫 abort...

assert用法總結

assert巨集的原型定義在中,其作用是如果它的條件返回錯誤,則終止程式執行,原型定義 include void assert int expression assert的作用是現計算表示式 expression 如果其值為假 即為0 那麼它先向stderr列印一條出錯資訊,然後通過呼叫 abort...

assert用法總結

assert巨集的原型定義在中,其作用是如果它的條件返回錯誤,則終止程式執行,原型定義 assert的作用是現計算表示式 expression 如果其值為假 即為0 那麼它先向stderr列印一條出錯資訊,然後通過呼叫 abort 來終止程式執行。請看下面的程式清單badptr.c root loc...