2015-11-03 73 views
0

我一遍又一遍瀏覽了這個函數,並且無法弄清楚爲什麼我在編譯代碼時遇到這個警告/錯誤。我使用的編譯器與-Werror一起運行,所以我不確定它是警告還是錯誤,但是我得到的錯誤是:二進制搜索功能整理不返回int

錯誤:控制可能會達到非無效函數的結束[-Werror, - Wreturn型]

這裏是我的功能

int binarySearch(int key, int array[], int min, int max) 
{ 
    //Check if there is value is not found 
    if(max < min) 
    { 
     return -1; 
    } 
    else 
    { 
     //find midpoint 
     int midpoint = (min + max)/2; 

     //Run recursive steps 
     if(array[midpoint] < key) 
     { 
      binarySearch(key, array, midpoint + 1, max); 
     } 
     else if(array[midpoint] > key) 
     { 
      binarySearch(key, array, min, midpoint - 1); 
     } 
     else 
     { 
      return midpoint; 
     } 
    } 
} 
+2

你不能只是調用binarySearch,你需要做它的返回值。也許你想說'return binarySearch(..)' –

回答

2

如果array[midpoint] < keyarray[midpoint] > key,你叫binarySearch遞歸,然後脫落功能的結束沒有指定一個返回值。您大概想要返回這兩個分支中的遞歸調用所返回的值,例如,

return binarySearch(key, array, midpoint + 1, max); 

(爲了回答您的其他問題,編譯器診斷本來是一個警告,如果-Werror沒有設置,但警告指示代碼中的錯誤,這當然是爲什麼-Werror通常是一個好主意)

+0

這是一個錯誤,不是一個警告:/ – Malina

+0

從man gcc,在-Wreturn-type下:「關於任何」返回「語句也*警告*(強調添加)在返回類型不是「無效」的函數中沒有返回值(從函數體的末尾掉下來被認爲沒有值返回)「。 - 錯誤是什麼使它成爲一個錯誤。 – Ray