2017-06-15 92 views

回答

1

這是因爲,正如警告所說,並非代碼的所有路徑都會返回一個值,而函數具有不同的返回類型,它告訴編譯器「嗨,我會返回一些東西。」但你實際上並沒有這樣做,如果Dest一個不爲1或2


你的評論:

Dest can only be 1 or 2 (it's an enum)

是好的,但只有你知道,你的編譯器不,它不會接受你的話。它只能看到你的代碼的靜態屬性,它不能預測運行時如何去,因此它不會接受你的代碼。對於所有它知道Dest可以通過


你應該添加某種默認值的外部的代碼等等等等改變:

int Fct_name (int nb1, int * nb2) 
{ 
    switch (Dest) 
    { 
    case 1 : 
     return Fct_1(nb1,nb2); 
    case 2 : 
     return -1; 
    } 
    return 0; 
} 
+0

噢好吧..我以爲編譯器會知道Dest只能是1或2 ..謝謝大家的回答! – Guigui

+0

@Gill Bates:如果'Dest'是一個枚舉,那麼編譯器知道,因爲所有其他值都是無效的(我想陷阱表示?)。 –

+0

@Guigui編譯器可能知道,我們不知道'Dest'是什麼類型。 – Slava

0

正如@NathanOliver所說,警告意味着可能有一種情況,您的函數可能不會返回任何值。更確切地說,如果用戶輸入的值不是1或2,那麼你的函數不會返回任何值。

你可能會認爲你只打算輸入1或2.但編譯器不知道這一點。

你可以做的是 -

  1. 忽略警告 - 您可以忽略警告,請便。但要小心,在所有情況下只能將1 o 2作爲參數。

Though I would not recommend ignoring the warning. In general, it is better to pay heed to the warnings. In the long run, it saves you from many bugs in case you are working on big projects.

  • 添加默認 - 這種情況就不會實際執行過,但現在編譯器將停止給予警告。
  • 下面是更正後的代碼 -

    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; 
    } 
    
    +3

    不要*忽略警告*。更改代碼以刪除警告是微不足道的。 – NathanOliver

    -1

    在函數的末尾添加回報XXX那麼這將確保編譯器不會無論如何都沒有發生價值迴歸的情況下到達函數的末尾。

    0

    如果dest是隻有兩個值的枚舉,這是不必要的複雜 - return Dest == 1 ? Fct_1(nb1,nb2) : -1;就夠了。 否則,請將case 2:替換爲default:

    0

    如果你說的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是一個整數,或者如果枚舉定義比12其他值,然後我得到一個錯誤也是如此。這可以被固定用default路徑:

    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; 
        } 
    } 
    
    0

    如果目的地只能是1或2,你可以重寫這樣

    int Fct_name (int nb1, int * nb2) 
    { 
        if(Dest == 1) return Fct_1(nb1,nb2); 
        return -1; 
    } 
    
    相關問題