我一遍又一遍地浏览了这个函数,无法弄清楚为什么我在尝试编译代码时会收到此警告/错误。我使用的编译器运行-Werror所以我不确定它是警告还是错误,但我得到的错误是:
错误:控件可能会达到非空函数的结束[-Werror,-Wreturn-type]
这是我的功能
int binarySearch(int key, int array[], int min, int max)
{
//Check if there is value is not found
if(max < min)
{
return -1;
}
else
{
//find midpoint
int midpoint = (min + max) / 2;
//Run recursive steps
if(array[midpoint] < key)
{
binarySearch(key, array, midpoint + 1, max);
}
else if(array[midpoint] > key)
{
binarySearch(key, array, min, midpoint - 1);
}
else
{
return midpoint;
}
}
}
答案 0 :(得分:2)
如果array[midpoint] < key
或array[midpoint] > key
,则递归调用binarySearch
,然后在不指定返回值的情况下从函数末尾删除。您可能希望返回由这两个分支中的递归调用返回的值,例如
return binarySearch(key, array, midpoint + 1, max);
(要回答你的另一个问题,如果-Werror
没有设置,编译器诊断会发出警告,但是警告表示代码中存在错误,这当然是为什么{{1}通常是一个好主意。)