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



若对你有帮助,欢迎点赞、收藏、评论,你的支持就是我的最大动力!!!

同时,阿超为大家准备了丰富的学习资料,欢迎关注公众号“超哥学编程”,即可领取。

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百里杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值