Error: control may reach end of non-void function in C

前端 未结 4 766
没有蜡笔的小新
没有蜡笔的小新 2020-12-06 02:12

I cannot figure out why this error is happening: error: control may reach end of non-void function

Here is the code:

bool search(int val         


        
相关标签:
4条回答
  • 2020-12-06 02:28

    That compiler warning is not correct. Anyway, there is a bigger problem with your code:

    bool search(int value, int values[], int n) {
    
        if (n < 1) {
            return false;
        }   
    
        for (int i = 0; i < n; i++) {
            if (values[i] == value) {
                return true;
                break;
            }
            else {            // !
                return false; // ! <-- Here is the mistake.
            }                 // !
        }    
    }
    

    This code only checks values[0] == value and then always returns. It's happening because of that else {return false;}.

    You should write it this way:

    bool search(int value, int values[], int n) {
    
        if (n < 1) {
            return false;
        }   
    
        for (int i = 0; i < n; i++) {
            if (values[i] == value) {
                return true;
                // break;  <- BTW, it's redundant.
            }
        }    
        return false;
    }
    

    Now, function checks entire values array and then returns false if there was no matches. But if it found a match, it will instantly return true witout checking other elements.

    Also, compiler will not emit a warning for this code.

    0 讨论(0)
  • 2020-12-06 02:33

    Your code is equivalent to

    return (n > 0 && values [0] == value);
    

    Either you are in the habit of writing very simple things in an excessively complicated way, or that code doesn't do what you want it to do.

    0 讨论(0)
  • 2020-12-06 02:37

    Some folks will probably hate this, but....

    bool search(int value, int values[], int n) {
    
       if (n < 1) {
          return false;
       }   
    
       bool ret = false;
       for (int i = 0; i < n; i++) {
          if (values[i] == value) {
             ret = true;
             break;
          }
       }    
       return ret;
    }
    
    0 讨论(0)
  • 2020-12-06 02:40

    You are getting this error because if your for loop breaks due to breaking condition i < n; then it don't find any return statement after for loop (see the below, I mentioned in code as comment).

    for (int i = 0; i < n; i++){
        if (values[i] == value){
            return true;
            break;
        }
        else{ 
            return false;
        }
    }
      // here you should add either return true or false     
    }
    

    If for loop break due to i >= n then control comes to the position where I commented and there is no return statement present. Hence you are getting an error "reach end of non-void function in C".

    Additionally, remove break after return statement. if return executes then break never get chance to execute and break loop.

       return true;  -- it returns from here. 
        break;  -- " remove it it can't executes after return "
    

    Check your compiler should give you a warning - 'unreachable code'.

    0 讨论(0)
提交回复
热议问题