如何检测 C++/COM 中无法访问的代码
How to detect unreachable code in C++/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中),但我相信存在任何合理的方法来找到这个错误。我真正的应用程序有大约 300 万行代码,我的目标是找到并重构这个地方。任何想法将不胜感激。
严格来说,要求工具在StackOverflow上是题外话。幸运的是,您不需要任何工具,因为您已经拥有所需的一切。
您可能希望通过以下方式之一启用编译器警告 C4702:无法访问的代码(级别 W4):
- 将警告级别设置为
/W4
(但是,这会启用一堆其他警告,而不一定有用)
将警告级别 - C4702 设置为当前警告级别(默认为
/W3
):/W34702
- 启用此警告,
#pragma warning(enable: 4702)
另请参阅:
- MSDN:警告级别
- 在视觉工作室中启用单个警告
附言:任何互联网搜索引擎都可以轻松访问此信息。下次遇到问题时,您可能需要在发布问题之前尝试搜索。
相关文章:
- 我的简单if-else语句是如何无法访问的代码
- 访问被拒绝后,c++中的故障保护代码
- 为什么示例代码访问IUnknown中已删除的内存
- 使用 g++7 构建的代码在访问未对齐的内存时崩溃
- 无法访问的代码 在 C++11 中,可能导致这种情况的原因是什么?
- 提供对不同类型的数据(建议、代码审查)的线程安全访问的类
- 无法访问的代码如何导致我的程序崩溃?
- 是否可以访问代码中的调用堆栈?
- C++/CLI访问字符串::来自非CLI代码的格式
- Java 本机访问代码错误:"Invalid memory access"
- 访问C 代码中的PWD
- 我们还能使用任何其他方法来访问Android中的C 代码,而不是使用JNI访问C 代码
- 如何将DLL访问代码从C++移植到C#
- 警告级别4中的不可访问代码警告
- 使用.open()成员函数C++的ifstream数组的错误访问代码
- 在 Apache Cordova for Android 中访问C++代码
- 错误的访问代码 1 glDrawElements
- 外部"C"访问代码的函数
- 访问代码中的Makefile变量
- 使用Unicode终止符的QString中的访问代码