二进制搜索函数完成而不返回 int
binary search function finishing without returning int
我一遍又一遍地查看这个函数,无法弄清楚为什么我在尝试编译代码时得到这个 warning/error。我使用的编译器以 -Werror 运行,所以我不确定它是警告还是错误,但我得到的错误是:
错误:控制可能到达非 void 函数的结尾 [-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;
}
}
}
如果 array[midpoint] < key
或 array[midpoint] > key
,您递归调用 binarySearch
,然后在未指定 return 值的情况下退出函数的末尾。您大概想要 return 由这两个分支中的递归调用编辑的值 return,例如
return binarySearch(key, array, midpoint + 1, max);
(要回答您的其他问题,如果未设置 -Werror
,编译器诊断将发出警告,但警告表明代码中存在错误,这当然是 -Werror
通常是个好主意。)
我一遍又一遍地查看这个函数,无法弄清楚为什么我在尝试编译代码时得到这个 warning/error。我使用的编译器以 -Werror 运行,所以我不确定它是警告还是错误,但我得到的错误是:
错误:控制可能到达非 void 函数的结尾 [-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;
}
}
}
如果 array[midpoint] < key
或 array[midpoint] > key
,您递归调用 binarySearch
,然后在未指定 return 值的情况下退出函数的末尾。您大概想要 return 由这两个分支中的递归调用编辑的值 return,例如
return binarySearch(key, array, midpoint + 1, max);
(要回答您的其他问题,如果未设置 -Werror
,编译器诊断将发出警告,但警告表明代码中存在错误,这当然是 -Werror
通常是个好主意。)