c语言标准库assert,C 标准库 - <assert.h>

本文详细介绍了C语言标准库中的assert宏,包括其功能、使用方法和注意事项。assert用于在程序调试阶段检查表达式的正确性,当表达式为假时,程序将终止并打印错误信息。可以通过#define NDEBUG来禁用assert。文章还强调了assert的使用场景,如检查函数参数合法性,并提醒避免在assert中使用改变环境的语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

assert.h是c标准库的一个头文件,该头文件的主要目的就是提供一个assert的宏定义。

assert只是对所给的表达式求值,就像if判断语句中一样,然后如果该值为真则正常运行,否则报错,并调用abort(),产生异常中断,exit出来。

该宏可以屏蔽掉,只需在包含assert.h之前#define NDEBUG,想开再#undef。从这里可以看出预处理带来的方便。接下来具体来看:

assert()函数使用总结

对于c语言来说,最多出现的就是函数了,今天我们来认识一下assert()函数,assert宏的原型定义在中,他的作用就是如果他的条件返回错误,那么就终止程序执行,而他的语法定义如下:

#include

void assert( int expression );

在上面原型定义中,assert的作用是计算表达式expression,如果他的值为假的话,就会向stderr打印一条出错信息,然后再通过调用abort 来终止程序运行。

如果不使用assert()函数,他会频繁的调用会机打的影响程序的性能,我们在调试结束后,可以用通过在包含#include 的语句之前插入 #define NDEBUG 来禁用assert调用,示例代码如下:

#include

#define NDEBUG

#include

assert()函数用法注意事项

1)在函数开始处检验传入参数的合法性如:

复制代码

int resetBufferSize(int nNewSize)

{

//功能:改变缓冲区大小,

//参数:nNewSize 缓冲区新长度

//返回值:缓冲区当前长度

//说明:保持原信息内容不变 nNewSize<=0表示清除缓冲区

assert(nNewSize >= 0);

assert(nNewSize <= MAX_BUFFER_SIZE);

...

}

复制代码

(2)每一个assert他是只需要检验一个条件的,因为同时检验多个条件时,如果断言失败,无法直观的判断是哪个条件失败,这里要切记。

3)在使用assert的时候,不能使用改变环境的语句,这是因为assert只在DEBUG中生效,如果这么做,会使用程序在真正运行时遇到问题,如:

A、assert(i++ < 100);

B、assert(i < 100);i++;

前者是错误的,后者才是正确的,通过这两个对比,你就可以看出来,前者本来就出错了,他这条语句就不会执行了。

4)assert和后面的语句应空一行,以形成逻辑和视觉上的一致感。

5)有的地方,assert不能代替条件过滤。

我们前面也提到断言了,那到底断言如何来使用呢,总结了一些使用的注意事项:

(1)使用断言对函数的参数进行确认。

(2)在编写函数时,要进行反复的考查,并且自问:“我打算做哪些假定?”一旦确定了的假定,就要使用断言对假定进行检查。

(3)使用断言捕捉不应该发生的非法情况。不要混淆非法情况与错误情况之间的区别,后者是必然存在的并且是一定要作出处理的。

Assert()他是一个调试程序的时候经常使用的宏,而且ASSERT只有在Debug版本中才有效,如果编译为Release版本则被忽略。

最常使用assert的有几个地方:一个是空指针检查,另外一个是检查函数参数的值。

学习assert()函数你要掌握这些知识点,不要急躁,慢慢学

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值