对于我的小功能,我不明白这个警告:
int Fct_name (int nb1, int * nb2)
{
switch (Dest)
{
Case 1 :
return Fct_1(nb1,nb2);
Case 2 :
return -1;
}
}
如果有人可以帮助我?
答案 0 :(得分:1)
这是因为,正如警告所说,并非代码的所有路径都返回一个值,而函数有一个独特的返回类型,告诉编译器“嘿,我将返回一些东西。”但如果Dest
不是1或2,那么你实际上并没有这样做。
您评论道:
Dest只能是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;
}
答案 1 :(得分:0)
如@NathanOliver所述,警告意味着可能存在您的函数可能不返回任何值的情况。更准确地说,如果用户输入的值不是1或2,那么您的函数不会返回任何值。
您可能认为您只会输入1或2.但编译器并不知道这一点。
你能做的是 -
虽然我不建议忽略警告。一般来说,最好注意警告。从长远来看,它可以帮助您避免许多错误,以防您从事大型项目。
以下是更正后的代码 -
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<select id="foo">
<option>Notification</option>
<option>Other</option>
</select>
<input type="text" id="new-option" required>
<button type="button" id="add">Add Option</button>
或者你可以这样做 -
int Fct_name (int nb1, int * nb2)
{
switch (Dest)
{
case 1 :
return Fct_1(nb1,nb2);
case 2 :
return -1;
default:
return 0;
}
}
答案 2 :(得分:0)
如果dest
是仅包含两个值的枚举,则不必要复杂 - return Dest == 1 ? Fct_1(nb1,nb2) : -1;
就足够了。
否则,请将case 2:
替换为default:
。
答案 3 :(得分: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
是整数,或者枚举定义了除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;
}
}
答案 4 :(得分:0)
如果Dest只能是1或2,你可以像这样重写
int Fct_name (int nb1, int * nb2)
{
if(Dest == 1) return Fct_1(nb1,nb2);
return -1;
}
答案 5 :(得分:-1)
在函数末尾添加一个返回XXX,这将确保编译器在没有返回值的情况下无论如何都不会到达函数的末尾。