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