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

How to detect unreachable code in C++/COM

本文关键字:访问 代码 COM 何检测 检测 C++      更新时间:2023-10-16

我想通过使用一些免费工具或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中),但我相信存在任何合理的方法来找到这个错误。我真正的应用程序有大约 300 万行代码,我的目标是找到并重构这个地方。任何想法将不胜感激。

严格来说,要求工具在StackOverflow上是题外话。幸运的是,您不需要任何工具,因为您已经拥有所需的一切。

您可能希望通过以下方式之一启用编译器警告 C4702:无法访问的代码(级别 W4):

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

另请参阅:

  • MSDN:警告级别
  • 在视觉工作室中启用单个警告

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