0

VS11 で C++ のコード分析を実行すると、多くの誤検知が発生しました。たとえば、数十個のスイッチがあり、ポインターが null である可能性があると表示されます。スイッチ内のすべてのケース (少なくとも 1 つのケース) でポインターが設定され、デフォルトで assert(0) と例外をスローする my 関数が呼び出されます。アサートと例外がメソッドにあるため、ポインターがnullになることは不可能であることに気付いていないと思います。このような誤検知が表示されないように、ヒントまたは修正するにはどうすればよいですか?

4

2 に答える 2

2

スイッチで使用_Analysis_assume_(FALSE)してみてください。コンパイラに到達できないコードを示唆します。

スローして返さない関数を で装飾することもできます_Analysis_noreturn_

于 2012-03-10T06:47:57.843 に答える
1

デフォルトのケースで呼び出されたメソッドが何も返さない場合は、デフォルトのケースでポインターに割り当てられる「偽の」null 値を返すようにすることができます。

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;
    }
}

お役に立てれば。

于 2012-03-10T03:30:38.783 に答える