Visual C ++开关控制路径僵局

时间:2016-05-11 20:29:38

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

这会产生警告C4715:并非所有控制路径都返回一个值。

int f_no_default(bool true_or_false)
{
    switch (true_or_false)
    {
    case (true) :
        return 1;
    case (false) :
        return 0;
    }
}

但是这会产生警告C4809:switch语句有冗余的'default'标签;所有可能的'案例'标签都给出了。

int f_with_default(bool true_or_false)
{
    switch (true_or_false)
    {
    case (true) :
        return 1;
    case (false) :
        return 0;
    default:
        return 0;
    }
}

我该怎么办? (除了将警告视为错误之外)

Visual Studio 2013 V12.0

1 个答案:

答案 0 :(得分:2)

  

我该怎么办? (除了将警告视为错误之外)

以下代码可能会修复它:

int f_no_default(bool true_or_false)
{
    switch (true_or_false)
    {
    case (true) :
        return 1;
    case (false) :
        return 0;
    }

    return 0; // <<<<<<<<<<<<<<<<<
}

这是一个愚蠢的警告,但静态分析功能取决于实际的编译器实现,警告消息的用处也是如此。

另一个选项(更符合您的函数名称)将抛出异常:

int f_no_default(bool true_or_false)
{
    switch (true_or_false)
    {
    case (true) :
        return 1;
    case (false) :
        return 0;
    }

    throw std::runtime_error("Unecpected value for 'true_or_false'");
}