如何在C ++ / COM中检测无法访问的代码

时间:2016-03-18 15:10:03

标签: c++ visual-studio com

我想通过使用一些免费工具或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万行代码,我的目标是找到并重构这些地方。任何想法都会受到赞赏。

1 个答案:

答案 0 :(得分:2)

<子> 严格来说,要求工具是offtopic on StackOverflow。 幸运的是,你不需要任何工具,因为你拥有所需的一切。

您可能希望通过以下任一方式启用编译器警告C4702: unreachable code(级别W4):

  • 将警告级别设置为/W4(但是,这会启用一堆其他警告,而不一定是有用的警告)
  • 将警告级别C4702设置为当前警告级别(默认为/W3):/W34702
  • 使用#pragma warning(enable: 4702)
  • 启用此警告

另见:

<子> 附:任何互联网搜索引擎都可以轻松访问此信息。下次遇到问题时,您可能希望在发布问题之前尝试搜索。