What does "control reaches end of non-void function" mean?

162,897

Solution 1

The compiler cannot tell from that code if the function will ever reach the end and still return something. To make that clear, replace the last else if(...) with just else.

Solution 2

The compiler isn't smart enough to know that <, >, and == are a "complete set". You can let it know that by removing the condition "if(val == sorted[mid])" -- it's redundant. Jut say "else return mid;"

Solution 3

Error image

If the function is non-void,it means it has to return something before reaching the end of function block[ _} ].So, when we give only if and else-if statements the compiler cannot tell from that code,that any of these statements will be evaluated to true and return something.Means, if all of the condition evaluates to false,then the control will reach the end of function,without returning something,which is wrong.

Share:
162,897
tekknolagi
Author by

tekknolagi

(your about me is currently blank) click here to edit

Updated on July 09, 2022

Comments

  • tekknolagi
    tekknolagi almost 2 years

    I've been getting strange compiler errors on this binary search algorithm. I get a warning that control reaches end of non-void function. What does this mean?

    int binary(int val, int sorted[], int low, int high) {
        int mid = (low+high)/2;
    
        if(high < low)
            return -1;
    
        if(val < sorted[mid])
            return binary(val, sorted, low, mid-1);
    
        else if(val > sorted[mid])
            return binary(val, sorted, mid+1, high);
    
        else if(val == sorted[mid])
            return mid;
    }