assert断言的使用与效果 (填坑)

在之前回文串中使用了assert

#include<stdio.h>
#include<string.h>
#include<assert.h>
char * my_strlwr(char * str) //定义一个my_strlwr函数
 
{
assert(str); //str的非空性
char *ret = str; //定义一个ret保存最初的str
while(*str != '\0') //判断字符串是否结束
{
if((*str >= 'A')&&(*str <= 'Z'))//判断当前啊字符是否是 大写字母
{
*str = *str +32; //根据ascii码表将其转化为小写字母
str++;
}
else
str++;
}
return ret; //返回该字符串数组的首地址

此次解释一下assert的使用方法及效果

assert.h头文件支持的断言库是一个用于辅助调试程序的小型库。它由assert()宏组成,接受个整型表达式作为参数。如果表达式求值为假(非零),assert()宏就在标准错误流(stderr)中写入一条错误信息,并调用abort()函数终止程序(abort()函数的原型在stdlib.h头文件中). assert()宏是为了标识出程序中某些条件为真的关键位置,如果其中的一个具体条件为假,就用assert()语句终止程序。通常,assert()的参数是一个条件表达式或逻辑表达式。如果assert()中止了程序,它首先会显示失败的测试,包含测试的文件名和行号。

简单来说就是计算表达式expression 若其值为假(0)则打印一行报错信息

类似于if else 的作用

if(expression){继续执行}else{报错}

 同时也有缺点  频繁地调用会极大影响程序的性能 增加额外的开销

可以在调试结束后在包含 #include<assert.h>的语句前插入#define NDEBUG来禁止assert调用

使用情景:函数开始处检验输入参数的合法性

eg  assert(n>=0)//如果输入的n值小于零 则报错并且结束程序的运行

注意:1>每个assert只用于检验一个条件 同时及检验多个条件时 如果断言失败 则无法直观的判断哪一个条件失败

           2>不能使用环境改变语句 因为assert只在DEBUG中生效

eg assert(i++<100)  如果出错 在执行前如果i=100 i++就不会被执行

 

最后附上assert报错样例

 11.5

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值