off*_*066 7 c if-statement function
在C中定义函数时,在以某种方式编写if/else逻辑时,我会在编译器中收到"控件可能达到非空函数结束"错误(下面的场景1),但是在编写时我没有收到错误逻辑另一种方式(下面的场景2).对我来说,编写这个函数的两种方式看起来都很相似,所以我不知道为什么版本1不能编译.
场景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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
情景2
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;
}
Run Code Online (Sandbox Code Playgroud)
在for循环之后,场景2是否总是返回false?或者在第一次返回值后,函数本质上是"停止",因此一旦值与值[i]匹配,则返回"true"?
问题是C编译器不够智能,无法确定第一个函数在没有返回值的情况下到达末尾的情况:
C标准不需要这样的检查,因此编译器会发出警告.