assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:[1]
#include <assert.h>
void assert( int expression );
assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。
//demo1.c
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
int demo1(int num)
{
assert(num>100);
printf("demo2:%d\n",num);
return 0;
}
//demo2.c
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
int demo2(int num)
{
assert(num>200);
printf("demo2:%d\n",num);
return 0;
}
//demo.c
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
demo1(110);
demo2(110);//不满足 num>200的条件,报错如下
return 0;
}
测试现象:
root@ubuntu:/work/demo# gcc *.c ;./a.out
demo2:110
a.out: demo2.c:7: demo2: Assertion `num>200' failed.
Aborted
在调试结束后,可以通过在包含#include <assert.h>的语句之前插入 #define NDEBUG 来禁用assert调用,示例代码如下:
#include <stdio.h>
#define NDEBUG
#include <assert.h>
如:
//demo2.c
#include <stdio.h>
#define NDEBUG //仅对本文件起作用
#include <assert.h>
#include <stdlib.h>
int demo2(int num)
{
assert(num>200);//未编译展开宏。
printf("demo2:%d\n",num);
return 0;
}
现象:
root@ubuntu:/work/demo# gcc *.c ;./a.out
demo2:110
demo2:110
参考:
1. assert()函数用法总结