断言(Assert)的用法

assert()是个宏或者是个函数。其作用相当于

 if(表达式成立){
	 程序正常运行;
 }else{
	 报错&&中止程序(避免程序运行引起更大错误);
 }

但是这样写会有无数个if语句,甚至会出现一个if语句的括号从文件头到文件尾。
多数情况下,要验证的假设只是偶然事件,测试一下最坏的情况是否发生,所以有assert()
assert() 宏的原型定义在 assert.h 中

#include "assert.h"
void assert(int expression);
// 如果其值为真,则不做任何操作,程序继续运行
// 如果其值为假,打印日志,调用abort()中止程序运行

“ 频繁的调用会极大的影响程序的性能,增加额外开销 ”
搜索assert()的用法,几乎每一条回答都有这一句话,我寻思着,频繁的调用哪个函数不会增加开销呢,那这个“极大”的描述让我更疑惑了,也没个人解释一下,我自己去查。

查不到,但是据我粗浅的理解,有以下两点:

  1. assert() 会在主程序的路径上额外的计算表达式,造成不必要的开销,所以一般只在开发过程中使用。
  2. 主要用于检查程序逻辑上的假设是否成立。它不处理错误,只是可以发现错误,并通过日志快速定位错误以便开发人员们修复。在生产环境下,应该被禁用。
posted @ 2024-09-13 10:20  皮卡成球  阅读(44)  评论(0编辑  收藏  举报