踩坑记录:c++中bool类型函数未给定默认返回值导致的未定义行为

bool getJumpStep(const string& strResponse,const int & mode)
{
	size_t inextStep;
	if (1 == mode && strResponse.substr(0,2) == "62")
	{
		inextStep = 2;
		return true;
	}

	if (2 == mode && strResponse.substr(0,2)!= "62")
	{
		inextStep = 1000;
		return true;
	}
}


int main()
{
	vector<string> vctResp = { "625003", "7F5013" };
	for (auto & strRes : vctResp)
	{
		if (getJumpStep(strRes, 0))
		{
			break;
		}
	}

}

上面这两段代码是在项目中踩的坑,我做了简化。

主要做了这么一个事:执行一个特殊功能,在发命令的时候对应答做判断,从而决定下一步跳转至哪里。

在PC上执行时,getJumpStep没有走到return true;

if (getJumpStep(strRes, 0))

也没有进入,看似好像是按照预期执行。

代码推送至安卓设备以后,发生了预期以外的结果,走进了break,这个问题摆出来很简单,但是在项目中定位却花了很长时间,因为在安卓端不方便调试,只能打日志。

总结:

C++ 要求非 void 函数必须覆盖所有可能的代码路径并返回值。违反此规则会导致未定义行为

所以在以后写代码的过程中还是要注意给出默认返回值

bool getJumpStep(const string& strResponse, int mode, size_t& nextStep)
{
	if (mode == 1) 
	{
		if (strResponse.substr(0, 2) == "62")
		{
			nextStep = 2;
			return true;
		}
	}
	else if (mode == 2)
	{
		if (strResponse.substr(0, 2) != "62") 
		{
			nextStep = 1000;
			return true;
		}

	}
	return false;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值