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