[英]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.