2017-06-15 38 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; 
    } 
    
    相关问题