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;
}