C – 使用某些if / else语法时,’控制可能会达到非空函数的结尾’

前端之家收集整理的这篇文章主要介绍了C – 使用某些if / else语法时,’控制可能会达到非空函数的结尾’前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在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; 
        }
    }

}

场景2

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

在for循环之后,场景2是否总是返回false?或者在第一次返回值后,函数基本上是“停止”,因此一旦值与值[i]匹配,则返回“true”?

解决方法

问题是C编译器不够智能,无法确定第一个函数在没有返回值的情况下到达末尾的情况:

>当循环执行至少一次时,if语句的两个分支都有一个条件返回,和
>当循环从不执行时,将从函数顶部的条件语句返回.

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

原文链接:https://www.f2er.com/c/119088.html

猜你在找的C&C++相关文章