<assert.h>
定义了两个用来调试程序的宏: assert
和NDEBUG
,assert
用来判断表达式是否为真,如果为真继续执行,如果为假,向stderr输出一条错误消息,并调用<stdlib.h>
里的abort()
函数来终止进程。NDEBUG
宏用来控制文件中的assert
宏是否有效,可以在编译选项,make文件或者#include<assert.h>
之前进行定义,一旦NDEBUG
被定义了,assert
就失效了。
源文件:
#define NDEBUG
#include<assert.h>
#include<stdlib.h>
int main(){
int i=0;
assert(i==1);//应该出错
return 0;
}
输出,什么都没有,程序正常执行:
$ cc assert.c
$ ./a.out
如果在原文件中注释掉#define NDEBUG
输出,assert()内的表达式为假,输出错误信息,退出程序:
$ cc assert.c
$ ./a.out
a.out: assert.c:8: main: Assertion `i==1' failed.
Aborted (core dumped)