并非所有控制路径都返回值

时间:2015-08-23 08:29:33

标签: c++ visual-studio c++11

为什么Visual Studio会使用以下代码向我显示该错误:

    int func( int a )
{
    if ( a < 0 )
        return -a & 3;
    else if ( a > 0 )
        return a | 8;
    else if ( a == 0 )
        return 10;
}

2 个答案:

答案 0 :(得分:1)

似乎编译器不够聪明。:)

尝试按以下方式更改功能主体

if ( a < 0 )
    return -a & 3;
else if ( a > 0 )
    return a | 8;
else 
    return 10;

此外,您可以在其他地方发表评论,因为 @buc

提供建议
if ( a < 0 )
    return -a & 3;
else if ( a > 0 )
    return a | 8;
else /* a == 0 */ 
    return 10;

答案 1 :(得分:1)

编译器不够聪明,无法意识到你的三个案例中的一个必须被击中。写它的更好方法是:

int func( int a )
{
    if ( a < 0 )
    {
        return -a & 3;
    }

    if ( a > 0 )
    {
        return a | 8;
    }

    // a must be 0
    return 10;
}