[英]Control may reach end of non-void function ERROR
我似乎找不到此功能的問題。 我對C還是比較陌生,並且試圖了解為什么此函數無法...函數。 我使用Xcode並以“控件可能到達非空函數的結尾”警告結尾。 感謝您的幫助
int call_shooting(char p1[10][10], char p2[10][10], char p3[10][10], char p4[10][10], char hit_miss[2], char data[5][2], int coin, int hit_miss_storage[2][128], int coord_storage[4][128])
{
int j = 0, k = 0, f = 0;
if (coin == 1)
{
while (j == 0)
{
shoot(p1, p2, p3, p4, 1, hit_miss, k, hit_miss_storage, coord_storage);
check_sink(p1, data, 0);
j = check_win_loss(p1);
if (j == 1)
{
system("cls");
print_board(p2, p4);
hit_miss_ships(hit_miss);
sunken_ships(data);
printf("\nYou won!!!\n\n");
return 1;
break;
}
shoot(p1, p2, p3, p4, 0, hit_miss, k, hit_miss_storage, coord_storage);
check_sink(p2, data, 1);
j = check_win_loss(p2);
if (j == 1)
{
system("cls");
print_board(p2, p4);
hit_miss_ships(hit_miss);
sunken_ships(data);
printf("\nYou lost!!!\n\n");
return 0;
break;
}
system("cls");
print_board(p2, p4);
hit_miss_ships(hit_miss);
sunken_ships(data);
k++;
f++;
}
}
else if (coin == 0)
{
while (j == 0)
{
shoot(p1, p2, p3, p4, 0, hit_miss, k, hit_miss_storage, coord_storage);
check_sink(p2, data, 1);
j = check_win_loss(p2);
if (j == 1)
{
system("cls");
print_board(p2, p4);
hit_miss_ships(hit_miss);
sunken_ships(data);
printf("\nYou lost!!!\n\n");
return 0;
break;
}
system("cls");
print_board(p2, p4);
hit_miss_ships(hit_miss);
sunken_ships(data);
shoot(p1, p2, p3, p4, 1, hit_miss, k, hit_miss_storage, coord_storage);
check_sink(p1, data, 0);
j = check_win_loss(p1);
if (j == 1)
{
system("cls");
print_board(p2, p4);
hit_miss_ships(hit_miss);
sunken_ships(data);
printf("\nYou won!!!\n\n");
return 1;
break;
}
system("cls");
print_board(p2, p4);
hit_miss_ships(hit_miss);
sunken_ships(data);
k++;
f++;
}
}
}
編譯器看到,如果coin
既不是0
也不是1
則該函數將結束而不返回任何內容。
如果你肯定知道這個功能不會被稱為coin
存在任何比其他0
或1
,那么你可以取代你if (coin == 1) {...} else if (coin == 0) {...}
和簡單的if (coin == 1) {...} else {...}
。
編輯:
還有一個問題是編譯器會看到,如果j
在您的while
循環中的任何一個循環內變為0
或1
以外的0
,則該函數將離開該循環並返回而不返回任何內容。
您至少有兩個選擇可解決此問題:
if (j == 1)
更改為if (j != 0)
。 要么
return -1;
在您的功能結束時。 如果j!=0
, while
編譯器會看到退出while
循環。 如果為j=check_win_loss(...)
分配了除1
以外的任何其他值,則該方法沒有返回值。
典型的C解決方案:在方法末尾返回錯誤代碼,例如return -1
。
對於您而言, coin
和check_win_loss
只能是/返回0
或1
,但是編譯器不知道。 如果coin == 2
或check_win_loss
return
ed 3
,則無需執行return
就可以退出該函數。
解決方案:嘗試使它們的(返回)類型bool看看是否可以解決。 否則,請考慮在函數末尾返回錯誤值或執行assert(0 && "This shouldn't ever happen");
調整編譯器。
請記住,這僅是警告,而不是錯誤(但是,如果它們實際上返回的值不同於0
或1
並且您退出時沒有返回值,但無論如何都將其讀取,則行為是不確定的,這會更糟)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.