Can';t编译C++;函数在我的机器上运行,尽管它使用联机编译器编译得很好 我在C++中有一个简单的递归二进制搜索程序。该程序使用ideone进行编译:

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

然而,当我试图在我的机器上使用OSX中的Xcode进行编译时,它给出了一个错误:控件可能会到达非void函数的末尾

当我尝试使用命令行编译时也是一样的:
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
是的,该编译器有误导性。我不应该使用它