打印
[STM32F1]

C语言assert()断言函数

[复制链接]
566|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lzbf|  楼主 | 2024-4-27 12:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
assert断言函数,用于特定情况下中止程序的运行。

使用场景:
比如有时我们在传一些指针参数时,可能会出现传空指针的情况导致程序出问题,这时我们就需要进行判断,温柔一点的方法就是,用if进行判断该情况结束程序或者说函数的调用等。比较粗暴简单的方式就是直接assert断言,出现该情况直接中止程序

简单说就是在我们认为某些值一定不能为空或者某表达式必须成立时,就可以使用assert对这个值进行断言

用法:
assert (int表达式)

即括号内可以是某些值,某些变量,也可以是一个表达式

当括号内的表达式计算结果为0时,断言失败,程序强行中止,为非0时,断言成功,继续进行程序

注意:
使用时要包含<assert.h>的头文件

断言失败会直接中止程序,不能什么场景都随便用


使用特权

评论回复
沙发
su1yirg| | 2024-7-29 12:30 | 只看该作者
assert() 是 C 语言标准库中的一个宏,用于在程序中进行断言检查

使用特权

评论回复
板凳
tax2r6c| | 2024-7-29 13:00 | 只看该作者
断言是一种调试工具,用于确保程序中的某个条件在运行时必须为真

使用特权

评论回复
地板
kaif2n9j| | 2024-7-29 14:42 | 只看该作者
如果断言的条件为假(即断言失败),assert() 会向标准错误流(通常是控制台)输出一条错误消息,并调用 abort() 函数终止程序的执行

使用特权

评论回复
5
y1n9an| | 2024-7-29 15:45 | 只看该作者
在定义了 NDEBUG 宏之后,assert() 宏会被定义为一个空操作,即不会进行任何检查

使用特权

评论回复
6
b5z1giu| | 2024-7-29 16:50 | 只看该作者
不要在 assert() 中包含副作用的表达式:因为禁用断言后,这些表达式不会被执行,可能会导致程序行为不一致。

使用特权

评论回复
7
suw12q| | 2024-7-29 19:00 | 只看该作者
断言用于调试,不应在生产代码中依赖断言来处理错误:断言失败会导致程序终止,因此在生产代码中应使用其他错误处理机制,如返回错误码或抛出异常

使用特权

评论回复
8
ex7s4| | 2024-7-29 20:30 | 只看该作者
其实就是为了调试,这个我觉得还是比较方便的

使用特权

评论回复
9
zhizia4f| | 2024-7-30 08:25 | 只看该作者
一般来说,大工程项目估计会考虑使用断言吧

使用特权

评论回复
10
d1ng2x| | 2024-7-30 10:00 | 只看该作者
这种断言是不是就类似于log输出啊?

使用特权

评论回复
11
t1ngus4| | 2024-7-30 12:56 | 只看该作者
我觉得断言挺好用的,而且还比较简单

使用特权

评论回复
12
米多0036| | 2024-8-31 13:09 | 只看该作者
assert 是一种在程序开发过程中用于调试和验证的工具

使用特权

评论回复
13
米多0036| | 2024-8-31 13:09 | 只看该作者
检查程序运行时的条件是否满足,若不满足,则程序会中止执行,帮助开发者快速发现并修复错误。

使用特权

评论回复
14
花间一壶酒sd| | 2024-8-31 21:58 | 只看该作者
在生产环境中,通常会关闭断言以避免不必要的程序中断。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

124

主题

5238

帖子

3

粉丝