码迷,mamicode.com
首页 > 其他好文 > 详细

头文件<assert.h>

时间:2017-07-20 19:44:49      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:deb   标准   控制   else   操作   fine   testing   异常   test   

头文件<assert.h>的目的就是提供宏assert的定义。在程序中可以用这个宏来断言,如果断言是真,则继续执行。如果断言为假,则在标准输入流中输出一条提示信息,并执行终止异常。

通过宏DEBUG控制断言是否有效:如果程序中包含<assert.h>的地方没有定义NDEBUG,则宏assert为活动形式;如果程序中包含<assert.h>的地方定义了NDEBUG,则宏assert为静止形式。即:

当存在

#define NDEBUG

#include <assert.h>

时,下面程序中出现的assert(x==y)不执行任何操作

当存在

#undef NDEBUG

#include <assert.h>

时,下面程序中出现的assert(x==y)不成立时会向输出错误并执行终止异常。

 

例1:

#define NDEBUG  //在取消声明以前的代码段中assert均为静止形式
#include <assert.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>

static int val=0;

static void field_abort(int sig)
{
if(val==1)
{
puts("SUCCESS TESTING <assert.h>");
exit(EXIT_SUCCESS);
}
else
{
puts("FAILURE TESTING <assert.h>");
exit(EXIT_FAILURE);
}
}

static void dummy()

{
int i=0;

assert(i==0);
assert(i==1);  //assert为静止形式,故不会发生异常。
}

#undef NDEBUG  //取消NDEBUG声明,在define NDEBUG以前assert都是活动形式。
#include <assert.h>

int main ()
{
assert(signal(SIGABRT,&field_abort)!=SIG_ERR);
dummy();
++val;
fputs("Sample assertion failure message -- \n",stderr);
assert(val==0);
puts("FAILURE TESTING <assert.h>");
return(EXIT_FAILURE);
}

 

执行结果是:

Sample assertion failure message --
t: testAssert.c:41: main: Assertion `val==0‘ failed.
SUCCESS TESTING <assert.h>

 

例2:

#include <assert.h>  //没有define NDEBUG,故在声明以前assert都是活动形式。
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>

static int val=0;

static void field_abort(int sig)
{
if(val==1)
{
puts("SUCCESS TESTING <assert.h>");
exit(EXIT_SUCCESS);
}
else
{
puts("FAILURE TESTING <assert.h>");
exit(EXIT_FAILURE);
}
}

static void dummy()

{
int i=0;

assert(i==0);
assert(i==1);  //活动形式,故会终止
}

#define NDEBUG
#include <assert.h>

int main ()
{
assert(signal(SIGABRT,&field_abort)!=SIG_ERR);
dummy();
++val;
fputs("Sample assertion failure message -- \n",stderr);
assert(val==0);
puts("FAILURE TESTING <assert.h>");
return(EXIT_FAILURE);
}

 

执行结果是:

t: testAssert.c:28: dummy: Assertion `i==1‘ failed.
Aborted

头文件<assert.h>

标签:deb   标准   控制   else   操作   fine   testing   异常   test   

原文地址:http://www.cnblogs.com/Mr-Wenyan/p/7213809.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!