assert用法
省流
"断言"用于在代码运行时验证某个条件是否为真( debug 阶段),
意思就是"我敢说它就成立"。当条件为假时,程序会中止并报告错误。其实也就是说:
assert(绝对不可能为 FALSE 的语句如果 FALSE 了代表着你的代码有问题这里就会直接爆);
.
我们在干活的时候就必须 100% 保证assert(val); // val!=0
.
从最近几天的经验来看 assert(表达式)
在函数中使用的重点是用于判断"传入的参数是否合法",
需要区别和"异常"的不同(可以处理的异常情况和无计可施的非法情况).
比如让你对空队列弹出,
这时候就需要捕捉空队列信息并且处理而不是把程序炸掉.
即使它是调试工具也应当尽量防止滥用 assert
. 举个例子,
比如下面这段代码:
1 |
|
可以看到的是,
return TRUE 或 FALSE
和assert
各自有不同的分工.
TRUE or FALSE
是作为功能的一部分来提示用户.
而assert
(断言失败)则是告诉垃圾代码的屎作俑者,
由于你的天才发挥, 这里爆炸了.
断言的基本概念
下面是ai解释概念.
- 语法:在 C 语言中,使用
assert
宏来实现断言:
1 |
|
当 condition
为假时,程序会停止执行,并输出错误信息。
- 用途:
- 调试:帮助开发者在开发过程中捕捉逻辑错误,确保程序的某些条件始终成立。
- 文档:通过明确条件要求,自文档化代码,帮助其他开发者理解预期的程序状态。
断言与 if
的比较
if
语句用于控制程序流,根据条件的真假执行不同的代码。- 断言则是一个条件检查工具,当条件为假时立即中止程序,而不是执行其他逻辑。这意味着:
- 断言用于检查内部状态,而
if
处理已知的逻辑分支。 - 断言捕捉不应发生的条件,
if
用于处理用户输入等外部条件。
使用注意事项
- 仅用于调试:在发布版本中,通常会禁用断言,以避免性能损失。
- 不替代错误处理:断言不应取代正常的错误处理逻辑,它们是用于捕捉程序员的错误,而不是处理用户输入导致的错误。
- 条件简洁:断言条件应尽量简单,方便调试时快速定位问题。
示例代码
1 |
|