assert与if的区别
assert与if的区别:
- assert俗称断言,一般只在debug模式生效;release模式下,该语句不参与编译。
- if语句,无论debug还是release模式下,该语句均参与编译。
这2个都是用来检查参数,是否符合一定条件的。
这里介绍一种,使用时的区别办法:
- 程序员主观上认为这是不可能的事,这种情况使用assert;
- 而程序员很清楚的知道,这个是有可能发生的事,这种情况使用if。
可能涉及到,用于检查如下的一些参数:
1、检查函数实参有效性
函数内部入口处,检查参数值
如下:
void fun(int a, string b) // 正确的使用方式
{
assert(a >= 2);
assert(b.size >= 28);
// ...
}
或
void fun(int a, string b) // 错误的使用方式
{
if (a < 2)
{
return;
}
if (b.size < 28)
{
return;
}
// ...
}
我们在写程序时,总是会有一些假定,这个假定也就是assert,也就是程序员,主观上认为不可能发生的事,这个事如果发生了,那么一定是有bug,这时候,就需要去发现并处理它。
比如上述函数中,我们假定的合法参数值范围,这个就属于程序员的编程假定,应该使用assert。
对于函数参数值有效性来说,是贯穿整个程序的,我们需要做的是,将因参数非法引起的bug,及时发现,并扼杀在摇篮中,这就是assert的作用。
如果用if,相当于我们默许了该非法值,并吞下了该bug,对造成传入非法值的原因,视而不见。为程序出现问题,埋下了坑。
故,检查函数参数非法,一般用assert,不用if,这样出现此问题,易于及时发现和修复。
2、检查函数返回值有效性
如下:
void fun() // 正确的使用方式
{
int ret = test();
if (ret < 0)
{
// log file...
return;
}
}
函数返回值,一般具备成功和失败,是在用户意料之中的事,所以一般用if,并配合记录下错误日志,方便查找原因。
3、检查变量值有效性
如下:
void fun() // 正确的使用方式
{
int a, b, c;
// ...
assert(b != 0);
c = a / b;
}
或
void fun() // 错误的使用方式
{
int a, b, c;
// ...
if (b == 0)
{
return;
}
c = a / b;
}
程序员的编程假定,应该是b一定不为0,否则就没法继续计算下去了。所以应该使用assert。
若对你有帮助,欢迎点赞、收藏、评论,你的支持就是我的最大动力!!!
同时,阿超为大家准备了丰富的学习资料,欢迎关注公众号“超哥学编程”,即可领取。