gpt4 book ai didi

C - 使用某些 if/else 语法时被 'control may reach end of non-void function' 混淆

转载 作者:太空狗 更新时间:2023-10-29 17:11:01 24 4
gpt4 key购买 nike

在 C 中定义函数时,当我以某种方式编写 if/else 逻辑时(下面的场景 1),我在编译器中收到“控件可能到达非空函数的结尾”错误,但我没有收到以另一种方式编写逻辑时出错(下面的场景 2)。对我来说,编写此函数的两种方式似乎很相似,所以我不知道为什么版本 1 无法编译。

场景一

bool search(int value, int values[], int n)
{
int i;
if (n<1)
{
return false;
}
for(i=0;i<n;i++)
{
if (value==values[i])
{
return true;
}
else
{
return false;
}
}

}

场景二

bool search(int value, int values[], int n)
{
int i;
if (n<1)
{
return false;
}
for(i=0;i<n;i++)
{
if (value==values[i])
{
return true;
}
}
return false;
}

场景2在for循环后不会一直返回false吗?还是该函数在第一次返回值后本质上是“停止”,因此一旦值与值 [i] 匹配就返回“真”?

最佳答案

问题是 C 编译器不够聪明,无法判断第一个函数在没有返回值的情况下到达结尾:

  • 当循环至少执行一次时,if语句的两个分支都有条件返回,并且
  • 当循环永远不会执行时,将从函数顶部的条件语句返回。

C 标准不需要这样的检查,因此编译器会发出警告。

关于C - 使用某些 if/else 语法时被 'control may reach end of non-void function' 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38297392/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com