簡體   English   中英

錯誤:控制可能會在C中達到非空函數的結束

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

我無法弄清楚為什么會發生這種錯誤: error: control may reach end of non-void function

這是代碼:

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;
        }
    }    
}

我理解錯誤意味着函數可能在沒有返回任何內容的情況下到達終點,但我無法弄清楚這可能會發生什么。

您收到此錯誤,因為如果您的for循環由於斷開條件而中斷i < n; 然后它在for循環之后找不到任何return語句(參見下面的代碼中我提到的注釋)。

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     
}

如果for由於回路斷線i >= n則控制談到這里我評論,也沒有位置return本聲明。 因此,您將收到一個錯誤“在C中達到非空函數的結尾”。

另外,在return語句后刪除break 如果return執行則break永遠不會有機會執行並打破循環。

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

檢查你的編譯器應該給你一個警告 - “無法訪問的代碼”。

你的代碼相當於

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

要么你習慣於以過於復雜的方式編寫非常簡單的東西,要么代碼不能按你想要的那樣做。

該編譯器警告不正確。 無論如何,你的代碼存在更大的問題:

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.
        }                 // !
    }    
}

此代碼僅檢查values[0] == value ,然后始終返回。 它正在發生,因為else {return false;}

你應該這樣寫:

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;
}

現在,函數檢查整個values數組,如果沒有匹配則返回false 但如果它找到匹配,它將立即返回true無需檢查其他元素。

此外,編譯器不會發出此代碼的警告。

有些人可能會討厭這個,但....

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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM