C语言的assert断言函数

assert断言函数

assert函数是一个非常强大的检查程序错误的函数
函数头文件

#include<assert.h>

函数原型

void assert( int expression );

其中expression是一个boolean表达式如果判断为假 return 0那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。如果判断为真 return 1继续执行接下来的语句。

assert用法思想

使用断言去检查程序错误
在对断言的使用中,一定要遵循这样一条规定:对来自系统内部的可靠的数据使用断言,对于外部不可靠数据不能够使用断言,而应该使用错误处理代码。换句话说,断言是用来处理不应该发生的非法情况,而对于可能会发生且必须处理的情况应该使用错误处理代码,而不是断言。
在通常情况下,系统外部的数据(如不合法的用户输入)都是不可靠的,需要做严格的检查(如某模块在收到其他模块或链路上的消息后,要对消息的合理性进行检查,此过程为正常的错误检查,不能用断言来实现)才能放行到系统内部,这相当于一个守卫。而对于系统内部的交互(如子程序调用),如果每次都去处理输入的数据,也就相当于系统没有可信的边界,这样会让代码变得臃肿复杂。事实上,在系统内部,传递给子程序预期的恰当数据应该是调用者的责任,系统内的调用者应该确保传递给子程序的数据是恰当且可以正常工作的。这样一来,就隔离了不可靠的外部环境和可靠的系统内部环境,降低复杂度。
但是在代码编写与测试阶段,代码很可能包含一些意想不到的缺陷,也许是处理外部数据的程序考虑得不够周全,也许是调用系统内部子程序的代码存在错误,造成子程序调用失败。这个时候,断言就可以发挥作用,用来确诊到底是哪部分出现了问题而导致子程序调用失败。在清理所有缺陷之后,就建立了内外有别的信用体系。等到发行版的时候,这些断言就没有存在的必要了。因此,不能用断言来检查最终产品肯定会出现且必须处理的错误情况

可以看出assert多用于debug调试中来找错误,在程序最后的版本中窝们的assert已经完成了它的使命,那么就可以将他们删除了。这样的好处,不仅使程序变得安全,并且使程序得到了瘦身。
assert的使用并不如上述那样的死板,根据实际情况来进行使用

assert使用案例

#include<stdio.h>
#include<assert.h>
int main(int argc,char *argv[])
{
 int a=3;//自己改a的值看看结果就知道了
 assert(a!=3);
 int* p=&a;
 printf("%d\n",p);
return 0;
}
发布了42 篇原创文章 · 获赞 23 · 访问量 2312

猜你喜欢

转载自blog.csdn.net/qq_40710190/article/details/103391303