控制到达非void函数的结尾[-Werror = return-type]

时间:2015-05-22 17:00:10

标签: c++ if-statement return-type

即使使用默认的else语句,我也会收到此错误

int max_of_four(int a, int b, int c, int d)
{
    if((a>b)&&(a>c))
    {        
        if(a>d)
            return a;
    }
    else if((b>c)&&(b>d))
    {  
        return b; 
    }
    else if(c>d)
    { 
        return c; 
    }
    else 
        return d;
}

3 个答案:

答案 0 :(得分:9)

您的第一个if是问题

if((a>b)&&(a>c))
{
    if(a>d)
        return a;
    // what about else?
}

如果您的外部条件为true,但内部条件为false,则不会有return个案例。

顺便说一下,你的方法是解决这个问题的一种非常复杂的方法,或者至少很难阅读。我会做这样的事情。

#include <algorithm>
int max_of_four(int a, int b, int c, int d)
{
    return std::max(std::max(a, b), std::max(c, d));
}

您也可以使用

#include <algorithm>
int max_of_four(int a, int b, int c, int d)
{
    return std::max({a, b, c, d});
}

答案 1 :(得分:1)

“控制到达非空函数的结尾[-Werror = return-type]” 在编译阶段发生错误,当有可能(分支)您的非void函数(定义为返回值)无法返回值时。虽然,取决于输入,但它不一定达到那个死胡同。

答案 2 :(得分:0)

在以下情况下首先输入其他条件:

int max_of_four(int a, int b, int c, int d)
{
     if((a>b)&&(a>c))
    {        
        if(a>d)
            return a;
         else
             return d;
    }
    else if((b>c)&&(b>d))
    {  
        return b; 
    }
    else if(c>d)
    { 
        return c; 
    }
    else 
        return d;
}