我不明白这个警告我的小功能:警告:“并不是所有的控制路径返回一个值” C++
int Fct_name (int nb1, int * nb2)
{
switch (Dest)
{
Case 1 :
return Fct_1(nb1,nb2);
Case 2 :
return -1;
}
}
如果有人能帮助我吗?
我不明白这个警告我的小功能:警告:“并不是所有的控制路径返回一个值” C++
int Fct_name (int nb1, int * nb2)
{
switch (Dest)
{
Case 1 :
return Fct_1(nb1,nb2);
Case 2 :
return -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;
}
正如@NathanOliver所说,警告意味着可能有一种情况,您的函数可能不会返回任何值。更确切地说,如果用户输入的值不是1或2,那么你的函数不会返回任何值。
你可能会认为你只打算输入1或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;
}
不要*忽略警告*。更改代码以删除警告是微不足道的。 – NathanOliver
在函数的末尾添加回报XXX那么这将确保编译器不会无论如何都没有发生价值回归的情况下到达函数的末尾。
如果dest
是只有两个值的枚举,这是不必要的复杂 - 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
路径:
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;
}
如果'dest'不是1或2,会发生什么? – NathanOliver
你没有'默认'案例 – CoryKramer
我试图把一个默认的案例,但警告仍然存在。 Dest只能是1或2(这是一个枚举) – Guigui