在 VS11 中运行 C++ 的代码分析时,我得到了很多误报。例如,我有几十个开关,它说我的指针可能为空。开关中的所有情况(至少在一种情况下)都设置了指针,并且默认调用了我的函数,该函数抛出了一个 assert(0) 和异常。我猜由于断言和异常在一个方法中,它没有意识到指针不可能为空。我如何提示或修复它,以免出现这样的误报?
user34537
问问题
484 次
2 回答
2
尝试_Analysis_assume_(FALSE)
在开关中使用,它会向编译器提示无法访问的代码。
你也可以用_Analysis_noreturn_
.
于 2012-03-10T06:47:57.843 回答
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;
}
}
希望这可以帮助。
于 2012-03-10T03:30:38.783 回答