Can';t编译C++;函数在我的机器上运行,尽管它使用联机编译器编译得很好 我在C++中有一个简单的递归二进制搜索程序。该程序使用ideone进行编译:
然而,当我试图在我的机器上使用OSX中的Xcode进行编译时,它给出了一个错误:控件可能会到达非void函数的末尾 当我尝试使用命令行编译时也是一样的:Can';t编译C++;函数在我的机器上运行,尽管它使用联机编译器编译得很好 我在C++中有一个简单的递归二进制搜索程序。该程序使用ideone进行编译:,c++,macos,C++,Macos,然而,当我试图在我的机器上使用OSX中的Xcode进行编译时,它给出了一个错误:控件可能会到达非void函数的末尾 当我尝试使用命令行编译时也是一样的:g++RecursiveBinarySearch.cpp和/a.out,它给出了:RecursiveBinarySearch.cpp:18:1:警告:控件可能到达非空函数的末尾[-Wreturn type] 有人知道为什么吗 #include <iostream> using namespace std; static const
g++RecursiveBinarySearch.cpp
和/a.out
,它给出了:RecursiveBinarySearch.cpp:18:1:警告:控件可能到达非空函数的末尾[-Wreturn type]
有人知道为什么吗
#include <iostream>
using namespace std;
static const int SIZE = 10;
int search(int arr[], int target, int startIndex, int endIndex)
{
if (startIndex > endIndex) return -1;
int midIndex = (startIndex + endIndex) / 2;
if (target == arr[midIndex])
return midIndex;
else if (target < arr[midIndex])
search(arr, target, startIndex, midIndex-1);
else
search(arr, target, midIndex+1, endIndex);
}
int main() {
int arr[SIZE] = {1,2,3,4,5,6,7,8,9,10};
cout << "3 is at index: " << search(arr, 3, 0, SIZE-1) << endl;
return 0;
}
#包括
使用名称空间std;
静态常数int SIZE=10;
int搜索(int arr[],int target,int startIndex,int endIndex)
{
if(startIndex>endIndex)返回-1;
int midIndex=(开始索引+结束索引)/2;
if(目标==arr[midIndex])
返回midIndex;
else if(目标 cout除非target==arr[midIndex]
,否则用于search
的代码不会返回值。您可能想返回递归调用search
返回的值,即返回搜索(arr,target,…)
我知道您可能会感到困惑。您的逻辑是正确的,但是编译器假定您没有返回语句,尽管它将在target=arr[midIndex]时到达
发出警告
控件可能到达非无效函数的末尾[-Wreturn类型]
一个快速(但丑陋的)修复方法是在方法末尾添加一个永远无法到达的return语句
请注意,将来遇到此错误时,通常会出现此问题
希望这对您有所帮助不,使用联机编译器编译不好。联机编译器不会向您显示警告,也不会将警告视为错误。如果您想使用联机编译器,请找到一个允许您设置自己标志的编译器,然后使用-Wall-Werror
是的,该编译器有误导性。我不应该使用它