tek*_*agi 21 c warnings compiler-warnings
我在这个二进制搜索算法上遇到了奇怪的编译器错误.我收到警告control reaches end of non-void function.这是什么意思?
int binary(int val, int sorted[], int low, int high) {
int mid = (low+high)/2;
if(high < low)
return -1;
if(val < sorted[mid])
return binary(val, sorted, low, mid-1);
else if(val > sorted[mid])
return binary(val, sorted, mid+1, high);
else if(val == sorted[mid])
return mid;
}
Run Code Online (Sandbox Code Playgroud)
rid*_*rid 34
编译器无法从该代码中判断该函数是否会到达结尾并仍然返回一些内容.为了清楚起见,else if(...)用just 替换最后一个else.
Ern*_*ill 11
编译器是不够聪明,知道<,>和==是一个"完整的".您可以通过删除条件"if(val == sorted [mid])"让它知道 - 这是多余的.Jut说" else return mid;"