发布网友 发布时间:2024-10-22 08:57
共1个回答
热心网友 时间:2024-11-07 06:26
最后一句判断 if (dis > 900) 不要写,直接 return 4 就行了。
因为执行到了这里时,dis 小于等于 900 的值,都已经在前面 return 了,这里必然大于 900,所以不用再写 if (dis > 900)。
编译器要测试所有返回的通路,如果哪个通路没有返回值,编译器就会警告,你这个例子里,if (dis > 900) 返回了 4,编译器从语法逻辑上推导,认为下面必须存在一个 else 的返回通路,逻辑才会完整,但编译器没有找到 else,所以警告了。你可能会说,else 的 dis 值,就是“小于等于” 900 啊,在前面都已经返回了,这里加 else 没有任何意义。是的,即使加了 else,程序也不可能运行到 else 处,但编译器只需要逻辑通路的完整,而“值”是不是处理过了,编译器不管,实际上也没法管,例如,我把其中一个 if (dis > 100 && dis <= 225) 的判断,改到一个函数里:
if (dis <= 25 && dis <= 100)从改后的 if 序列来看,编译器完全无法判断 foo 函数里干了什么,那么到了 if (dis > 900) 的判断时,100 到 225 的值怎么办?如果没有 else,编译返回什么呢?
所以,这些关于返回值通路的问题,编译器是不能帮你做任何事情的,只能你来做,而你是知道此处 dis 不可能小于等于 900,那么,你要做的事情,就是把 if (dis > 900) 删除。