<assert.h>定义了两个用来调试程序的宏: assertNDEBUGassert用来判断表达式是否为真,如果为真继续执行,如果为假,向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)
05-07 15:41