assert函数

assert函数

c++ assert()函数的原型及其介绍如下:

# include & ltassert.h & gtvoid assert( int表达式);功能:测试条件并可能终止程序。

C++ assert()的作用就是现在计算表达式。如果它的值为false(即0),它将首先向stderr打印一条错误消息,然后通过调用abort终止程序。使用C++ assert()函数的缺点是频繁调用会大大影响程序的性能,增加额外的开销。调试之后,您可以使用# include

# include & ltstdio.h & gt# define NDEBUG # include & ltassert.h & gt使用总结及注意事项:

1)在函数开始时检查传入参数的有效性。

比如:

int reset buffer size(int nNewSize){//函数:改变缓冲区大小,//参数:nNewSize缓冲区的新长度//返回值:缓冲区的当前长度//说明:保持原信息内容不变nnew size;= 0);assert(nNewSize & lt;= MAX _ BUFFER _ SIZE);2)每个断言只测试一个条件,因为同时测试多个条件时,如果断言失败,就无法直观判断哪个条件失败。

不好:

断言(nOffset & gt= 0 & amp& ampnOffset+nSize & lt;= m _ ninformationsize);好:

断言(nOffset & gt= 0);assert(no offset+nSize & lt;= m _ ninformationsize);3)不能使用改变环境的语句,因为assert只在DEBUG中生效。如果这样做,在实际操作中使用程序时就会遇到问题。

错误:

assert(i++ & lt;100)这是因为如果有错误,比如执行前i=100,那么这条语句就不会执行,然后i++命令也不会执行。

正确:断言(I

5)在某些地方,assert不能代替条件过滤。

参考代码1:

/* assert示例*/# include & lt;stdio.h & gt/* printf */# include & lt;assert.h & gt/* assert */void print _ number(int * myInt){ assert(myInt!= NULL);printf (“%dn “,* myInt);} int main(){ int a = 10;int * b = NULLint * c = NULLb = & ampa;print _ number(b);print _ number(c);返回0;}参考代码2:

# include & ltstdio.h & gt# include & ltassert.h & gt# include & ltstdlib.h & gtint main(void){ FILE * FP;fp = fopen( “test.txt “,” w “);//以可写方式打开一个文件,如果不存在,用assert( fp)创建一个同名文件;//所以不会出现错误fclose(FP);fp = fopen( “noexitfile.txt “,” r “);//以只读方式打开一个文件,如果不存在,则打开该文件,未能断言(FP);//所以有一个错误fclose(FP);//程序永远不会在这里执行返回0;}参考代码3:

# include & ltstdio.h & gt# include & ltassert.h & gt# include & ltstdlib.h & gt结构项{ int keyint值;};/*向列表中添加项,确保列表不为null */void additem(struct ITEM * ITEM ptr){ assert(ITEM ptr!= NULL);/*将项目添加到列表*/} int main(void){ additem(NULL);返回0;}

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

发表回复

登录后才能评论