我想通过使用一些免费工具或Visual Studio 2015来检测C ++ / COM中无法访问代码的以下问题。
void Foo()
{
HRESULT hr = E_FAIL;
// variable hr is not changed here
// a lot of source code here so detecting this situation manually is not so easy
if (SUCCEEDED(hr))
{
printf("Message."); // unreachable code
}
}
编辑:
我已经编辑了这个问题,因为我得到了相同的'向下投票',但我没有得到有价值的答案。当然,在我的项目中,我将警告级别设置为/W4
,但此设置只能识别这样的情况(可能我错了,但因此我的问题):
int main()
{
return 0;
printf("Message.");
return 0;
}
当代码更复杂时,编译器不会警告我(注意当你在c#中编写类似的代码时会得到正确的警告):
int main()
{
if (false)
{
printf("Message.");
}
return 0;
}
当我们创建更复杂的示例时,我们不会在两种语言中都收到警告 - C ++和C#(我的原始示例更复杂,因为使用了COM宏):
int main()
{
bool someCondition = false;
if (someCondition)
{
printf("Message.");
}
return 0;
}
也许我犯了一个错误,因为我询问了工具(我想到了Visual Studio的一些插件,因为我认为这种功能不是在这个IDE中构建的),但我相信存在任何合理的方法来找到这个bug 。我真正的应用程序有大约300万行代码,我的目标是找到并重构这些地方。任何想法都会受到赞赏。
答案 0 :(得分:2)
<子> 严格来说,要求工具是offtopic on StackOverflow。 幸运的是,你不需要任何工具,因为你拥有所需的一切。 子>
您可能希望通过以下任一方式启用编译器警告C4702: unreachable code(级别W4):
/W4
(但是,这会启用一堆其他警告,而不一定是有用的警告)/W3
):/W34702
#pragma warning(enable: 4702)
另见:
<子> 附:任何互联网搜索引擎都可以轻松访问此信息。下次遇到问题时,您可能希望在发布问题之前尝试搜索。 子>