相关疑难解决方法(0)

传统C/C++项目中的死代码检测

您如何在C/C++代码中进行死代码检测?我有一个非常大的代码库可供使用,至少10-15%是死代码.有没有基于Unix的工具来识别这个区域?有些代码仍然使用了很多预处理器,可以自动化处理吗?

c++ automation static-analysis legacy-code dead-code

68
推荐指数
5
解决办法
3万
查看次数

“控制到达非 void 函数末尾” with do { return result; while(条件);

我有以下功能(简化示例):

QByteArray DecompressBytes(const QByteArray& content){
  /* function body (with other return expressions) */

  do { return content; } while(content.size() != 0);
}
Run Code Online (Sandbox Code Playgroud)

添加最后一行用于测试,替换使用的宏。Visual Studio 没有发现此代码有问题,但 g++ 生成

警告:控制到达非 void 函数的末尾 [-Wreturn-type]

更改最后一行以return content;删除警告。
我的问题:为什么编译器会这样做?代码的形式应该是什么以避免任何警告?

最后一行过去是扩展为ASSERT_FAIL("must be unreachable", content)模式,并用另一个宏替换以禁止非布尔表达式,因此生成的表达式类似于. ASSERT_FAILdo { ... } while(false)whiledo { qt_assert_x("", "", 42); return content; } while(::helper::bool_verify(false));

g++ 版本 5.3.0,与 MinGW(标准 Qt 设置)一起使用。

更新:在尝试注释代码的不同部分之后(因为上面的纯示例不允许重现问题),出现了一些非常奇怪的情况:

QByteArray DecompressBytes(const QByteArray& content){
  QByteArray decompressed; //no 'unused variable' warning
  do { return content; …
Run Code Online (Sandbox Code Playgroud)

c++ gcc gcc-warning

5
推荐指数
1
解决办法
613
查看次数