[英]Control may reach end of non-void function C
我無法編譯我的代碼,但出現錯誤:控件可能會到達非void函數的結尾
/**
* Returns true if value is in array of n values, else false.
*/
bool search(int value, int values[], int n)
{
//Binary search algorithm
int first = 0;
int last = n-1;
int middle = (first+last)/2;
if (n<1)
return false;
else
{
while (first <= last)
{
if (values[middle]==value)
return true;
else if(values[middle]<value)
first=middle+1;
else if (values[middle]>value)
{
last=middle-1;
}
middle=(first+last)/2;
}
}
if (first>last)
return false;
}
誰能瀏覽我的代碼並幫助我弄清楚問題出在哪里? 我正在努力自己看它! 從我的角度來看,此函數返回true或false
bool
返回類型意味着,無論函數采用哪種執行路徑,始終都希望函數在其退出之前返回一個布爾值。 從目前的情況來看 ,檢查時似乎可以“擊倒”最后一個if
並且永遠不會擊中return語句。 要進行其他驗證,則需要以某種編譯器無法合理預期的方式逐步執行邏輯。 最后簡單地說:
if (first>last) {
return false;
} else {
return true;
}
或更簡而言之:
return (first > last) ? false : true;
在您的代碼中,函數不可能掉到最后。
但是,不需要編譯器准確診斷功能是否可以結束。 通常,這樣做將需要解決暫停問題。
相反,作為一種實際的措施,編譯器會進行一些基本的檢查和警告,因為它會看到if ( first > last ) return false;
,它沒有進行足夠的代碼分析來確定除非first > last
才能永遠無法到達此分支。
要取消顯示此警告,您可以刪除if ( first > last )
。 順便說一句,這是警告,不是錯誤; 因此它不應阻止您的編譯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.