C語言assert關鍵字
阿新 • • 發佈:2019-01-30
這是C語言的assert.h標頭檔案的定義
關鍵是看 這句#include "cvidef.h" #include "cvirte.h" #ifndef _ASSERT_H_ #define _ASSERT_H_ #ifdef __cplusplus extern "C" { #endif #undef assert #ifdef NDEBUG #define assert(exp) ((void) 0) #else void CVIANSI _assert(char *, char *, int); #define assert(exp) ((exp) ? (void) 0 : _assert(#exp, __FILE__, __LINE__)) #endif #ifdef __cplusplus } #endif #endif /* _ASSERT_H_ */
#define assert(exp) ((exp) ? (void) 0 : _assert(#exp, __FILE__, __LINE__))
1,如果 exp為真,則返回0,不進行任何操作。2,如果exp為假,則呼叫_assert(#exp, __FILE__, __LINE__)
_assert(#exp, __FILE__, __LINE__)
就是列印 assert斷言的內容: 主要是 exp的字串, 當前檔案的名字, 當前行數。具體例子如下:
編譯與執行:#include<stdio.h> #include<stdlib.h> #include<string.h> #include<assert.h> #define DEBUG //#undef DEBUG /** assert巨集的原型定義在<assert.h>中,其作用是如果它的條件返回錯誤,則終止程式執行,原型定義: #include <assert.h> void assert( int expression ); assert的作用是現計算表示式 expression ,如果其值為假(即為0),那麼它先向stderr列印一條出錯資訊, */ void main(){ #ifdef DEBUG printf("rong\n"); #endif fprintf(stderr,"error\n"); assert(1); int a = 1; assert(a == 1); }
當assert()內為真時:
-bash-4.1$ gcc -o a Demo.c
-bash-4.1$ ./a
rong
error
-bash-4.1$
當assert()內為假時:-bash-4.1$ gcc -o a Demo.c
-bash-4.1$ ./a
rong
error
a: Demo.c:24: main: Assertion `0' failed.
已放棄 (core dumped)
-bash-4.1$