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

Posted

技术标签:

【中文标题】并非所有控制路径都返回值【英文标题】:Not all control paths return value 【发布时间】:2015-08-23 08:29:32 【问题描述】:

为什么 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;

【问题讨论】:

您在函数作用域结束之前缺少return 语句。该错误消息实际上有什么不清楚的地方? 【参考方案1】:

编译器不够聪明,无法意识到必须命中您的三种情况之一。更好的写法是:

int func( int a )

    if ( a < 0 )
    
        return -a & 3;
    

    if ( a > 0 )
    
        return a | 8;
    

    // a must be 0
    return 10;

【讨论】:

【参考方案2】:

看来编译器不够聪明。:)

尝试通过以下方式更改函数的主体

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

您也可以按照 @buc

的建议在 else 之后发表评论
if ( a < 0 )
    return -a & 3;
else if ( a > 0 )
    return a | 8;
else /* a == 0 */ 
    return 10;

【讨论】:

我一般也会在最后一个else子句上注释条件,方便后面代码理解:else /* a == 0 */ @buc 我同意你的看法。

以上是关于并非所有控制路径都返回值的主要内容,如果未能解决你的问题,请参考以下文章

并非所有代码路径都返回一个值为啥我的 HAM Shortwave 广播应用程序会发生这种情况

C# 编译器错误:“并非所有代码路径都返回值”

获取异常“并非所有代码路径都返回值”

错误 CS0161 的原因:并非所有代码路径都返回值

如何解决 bool 方法上的“并非所有代码路径都返回值”?

如何检查所有代码路径是不是返回值