在编写程序过程中,尤其是调试代码时,往往需要一个提醒代码漏洞/Bug的小助手,以便于程序员及时修改和完善代码。而assert关键字就可以成为这个小助手。
1.什么是 assert 概念:
C/C++ 中的 assert 是一个宏,用于在运行时检查一个条件是否为真,如果条件不满足,则运行时将终止程序执行并输出一条错误信息。
assert 宏定义在 <assert.h> 或 <cassert> 头文件中,并接受一个参数,通常为一个语句。如果这个语句的结果为 false,assert 宏就会以"Assertion failed: , file , line "的形式显示出错信息,然后使程序崩溃并终止运行。如果该语句的结果为 true,则 assert 宏不做任何操作。
2.assert的用法
函数原型:assert(condition);
参数:condition为要判断的条件
如果condition判断结果为false,则程序就会停止执行。当程序停止执行时,assert就会断言失败,并输出一条程序的错误信息到控制台或日志文件中。
assert关键字常用于调试程序阶段,可以用来帮助程序员在程序出现异常或错误时,快速定位问题所在,以便于检查和就修改完善。在程序正常部署后,assert一般会被自动关闭。
3.assert案例
案例1:比较大小
#include <cassert>
#include <iostream>using namespace std;
int main()
{
int a = 10, b = 20;assert(a > b); // 条件不成立,程序会终止
cout << a + b << endl;
return 0;
}
在这个例子中,条件 a > b 不成立,程序就会在 assert 这个语句处崩溃,输出一条相应的错误信息。
案例2:模拟strlen函数
/*例程1*/
#include <stdio.h>
#include <assert.h>
#include <string.h>
//size_t --- unsigned int
size_t My_strlen(const char* str)//参数传数组首地址
{
assert("str != NULL");//注意:这里我把断言取消了,要用时把双引号去掉即可//断言,判断是否传的空地址,及时报错纠正
int count = 0;//计数//是假就不执行while循环//是真则执行函数体//不断判断后加加(后置++,先用后加),数组元素是否为字符串结束标志位'\0'
while (*str != '\0')
{
str++;count++;
}
return count;
}
int main()
{
char arr[] = "hello bit!!!";
int len = My_strlen(arr);
printf("%d\n", len);//12return 0;
}