Как компилятор находит пропущенную инструкцию возврата? - PullRequest
0 голосов
/ 24 января 2019

У меня есть функция для поиска элемента в массиве (бинарный поиск).Я получаю сообщение об ошибке, в котором говорится о пропущенном операторе возврата.(Комментируемая часть)

Как компилятор понимает, что оператор return отсутствует?

Как компилятор находит всепути выполнения, когда используются только if.Больше нет - если реализуется

public static int rank(int key, int []a, int lo, int hi)
    {
        if(lo>hi) return -1;
        int mid= lo+(hi-lo)/2;
        if(key<a[mid]) return rank(key,a,lo,mid-1);
        if(key>a[mid]) return rank(key,a,mid+1,hi);
        //else return mid;
    }

1 Ответ

0 голосов
/ 24 января 2019

Как компилятор находит все пути выполнения?

Он не очень умен, он не может обнаружить ветви, которые логически никогда не могут быть достигнуты, он просто хочет, чтобы все ветви заканчивались на return. Смотрите этот другой вопрос для случая, когда это не "достаточно умно" .

В вашем случае, он видит, что, возможно, ни одно из условий if не станет истинным, так что вы проваливаетесь до конца метода, и он хочет увидеть return там.

В вашем случае это рассуждение также верно: насколько я могу судить, оно вполне может провалиться во все ветви.

...