VS11代码分析提示?

时间:2012-03-10 03:06:59

标签: c++ visual-studio-2012 static-code-analysis

在VS11中运行C ++代码分析时,我得到了很多误报。例如,我有几十个开关,它说我的指针可能为空。交换机中的所有情况(至少在一种情况下)都设置了指针,默认情况下调用我的函数,该函数抛出一个断言(0)和异常。我猜因为断言和异常在一个方法中,它没有意识到指针为空是不可能的。我如何暗示或修复它,以免这样的假阳性出现?

2 个答案:

答案 0 :(得分:2)

尝试在交换机中使用_Analysis_assume_(FALSE),它会向编译器提示无法访问的代码。

您还可以使用_Analysis_noreturn_修饰投掷和不返回的函数。

答案 1 :(得分:1)

如果默认情况下调用的方法没有返回任何内容,您可以尝试使其返回一个“伪”空值,该值将在默认情况下分配给指针。

Type* MyClass::methodCalledInDefaultCase()
{
    pointer = 0;
    assert(0);
    throw Exception;
    return 0; // Hope this doesn't cause unreachable code warning
}

void MyClass::myMethod()
{
    pointer = 0;
    switch(whatever)
    {
        case foo:
            ...

        case bar:
            ....

        default:
            pointer = methodCalledInDefaultCase();
            break;
    }
}

希望这有帮助。