原 C斷言 靜態斷言

2021-09-08 08:28:50 字數 837 閱讀 8154

關於斷言,可以作為一種很強大的除錯方式或者程式執行時的錯誤診斷

但是斷言也不是適合於各種地方,伺服器軟體和嵌入式程式一般不適用,斷言會強制中斷正在執行的程式,對於伺服器等程式來說,

將會是乙個災難。加上,斷言會加劇cpu 的負載,其中會呼叫一些函式。

作為除錯時使用斷言是個不錯的選擇

一般斷言:

#ifndef ndebug

assert( conditon ) ;

#endif

這樣,你的斷言會在沒有定義ndebug 的時候檢測是否assert(..)中的表示式為真,如果不為真,將終止程式

但是,作為一種除錯方式,assert()一般不用於判斷使用者的輸入,而是斷言程式在某個時刻的狀態一定為真,當然,終止程式的方法有點粗魯,但是比起讓錯誤的程式繼續執行更加有效

下面是靜態斷言

為什麼使用靜態斷言?

靜態斷言可以在編譯時就對程式的錯誤做出判斷,而普通斷言只能在程式執行出現錯誤的時候做出退出並產生除錯資訊

static_assert(condition,string_condition);

第一次引數是表示式,第二個引數是輸出的資訊

static_assert()是c++ 新增的內容

在c語言裡可以這樣實現:

#define join( x , y ) join_agin( x, y )

#define join_agin(x,y) x##y

typedef static_assert(e)\

typedef char join(assert_failed_at_line,__line___) [(e)?1:-1]

C 斷言與靜態斷言 1

c 斷言與靜態斷言 斷言是很早之前就有的東西了,只需要引入cassert標頭檔案即可使用。往往assert被用於檢查不可能發生的行為,來確保開發者在除錯階段盡早發現 不可能 事件真的發生了,如果真的發生了,那麼就表示 的邏輯存在問題。最好的一點就是,斷言只在debug中生效,因此對於release版...

C 11 14執行時斷言與靜態斷言

標頭檔案 include 中的assert是執行時斷言,即當程式執行到assert處並該函式的形參計算出來為false。程式會出現報錯並退出。如果程式不執行到assert函式處是不會報錯的。而靜態斷言指的是在編譯階段就進行報錯。靜態斷言的實現 如下 define assert static e do...

C 11 靜態斷言static assert

一 assert 在c 中,或中提供了assert巨集 執行期斷言 可以定義ndebug來禁用assert巨集。二 static asser c 11 靜態斷言static assert,編譯期斷言。static assert 常量表示式,提示字串 兩個引數,乙個是斷言表示式,由於是在編譯期間,所以...