[英]Warning : “Not all control paths return a value” c++
我的小功能無法理解此警告:
int Fct_name (int nb1, int * nb2)
{
switch (Dest)
{
Case 1 :
return Fct_1(nb1,nb2);
Case 2 :
return -1;
}
}
如果有人可以幫助我?
如警告所述,這是因為並非函數的所有路徑都返回值,而函數具有獨特的返回類型,該類型告訴編譯器“嘿,我要返回一些東西”。 但是如果Dest
不是1或2,則實際上不執行此操作。
您評論了:
目的地只能是1或2(這是一個枚舉)
是的,但是只有您知道這一點,您的編譯器不會,並且您也不會相信。 它只能看到代碼的靜態屬性,無法預測運行時的運行方式,因此不會接受您的代碼。 就其所知, Dest
可以通過外部代碼等進行更改。
您應該添加某種默認值:
int Fct_name (int nb1, int * nb2)
{
switch (Dest)
{
case 1 :
return Fct_1(nb1,nb2);
case 2 :
return -1;
}
return 0;
}
如@NathanOliver所說,警告表示在可能的情況下,函數可能不返回任何值。 更准確地說,如果用戶輸入的值不是1或2,則您的函數不會返回任何值。
您可能會認為您只會輸入1或2。但是編譯器不知道這一點。
您可以做的是-
盡管我不建議您忽略該警告。 通常,最好注意這些警告。 從長遠來看,如果您正在處理大型項目,它可以避免許多錯誤。
這是更正的代碼-
int Fct_name (int nb1, int * nb2)
{
switch (Dest)
{
case 1 :
return Fct_1(nb1,nb2);
case 2 :
return -1;
default:
return 0;
}
}
或者您可以這樣做-
int Fct_name (int nb1, int * nb2)
{
switch (Dest)
{
case 1 :
return Fct_1(nb1,nb2);
case 2 :
return -1;
}
return 0;
}
如果dest
是僅包含兩個值的枚舉,則無需復雜return Dest == 1 ? Fct_1(nb1,nb2) : -1;
return Dest == 1 ? Fct_1(nb1,nb2) : -1;
足夠。 否則,將case 2:
替換為default:
。
如果Dest
實際上是您所說的枚舉,則編譯器不應針對您的情況發出警告。 至少我的編譯器沒有。 因此,以下代碼編譯時沒有警告/錯誤:
enum {
x = 1,
y = 2
} Dest;
int Fct_name (int nb1, int * nb2)
{
switch (Dest)
{
case 1 :
return -5; //Fct_1(nb1,nb2);
case 2 :
return -1;
}
}
int main() {
}
但是,如果Dest
是整數,或者枚舉定義的值不是1
和2
,那么我也會得到一個錯誤。 然后可以使用default
-path進行修復:
enum {
x = 1,
y = 2,
z = 3
} Dest;
int Fct_name (int nb1, int * nb2)
{
switch (Dest)
{
case 1 :
return -5; //Fct_1(nb1,nb2);
case 2 :
return -1;
default:
return 0;
}
}
如果目標只能是1或2,則可以這樣重寫
int Fct_name (int nb1, int * nb2)
{
if(Dest == 1) return Fct_1(nb1,nb2);
return -1;
}
在函數的末尾添加一個返回XXX,這將確保編譯器不會在沒有返回值的情況下到達函數的末尾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.