Cppcheck 文档似乎暗示可以跨多个翻译单元进行分析,如--max-ctu-depths
标志所示。这显然不适用于这里的玩具示例:
主要.cpp:
int foo();
int main (void)
{
return 3 / foo();
}
Run Code Online (Sandbox Code Playgroud)
foo.cpp:
int foo(void)
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
即使设置了--enable=all
和--inconclusive
,这个问题也不会出现在报告中。看起来 cppcheck 可能不是为进行跨文件分析而设计的,但该max-ctu-depths
标志却有所不同。我在这里错过了什么吗?任何帮助表示赞赏!
我是一名 cppcheck 开发人员。
Cppcheck 中的整个程序分析相当有限。我们有一些这样的分析,但它不是很“深入”,也不是很复杂。它当前仅跟踪您传递给函数的值。
一些示例测试用例(请随意将这些代码示例复制/粘贴到不同的文件中):https: //github.com/danmar/cppcheck/blob/main/test/testbufferoverrun.cpp#L4272 https://github.com/ danmar/cppcheck/blob/main/test/testbufferoverrun.cpp#L4383 https://github.com/danmar/cppcheck/blob/main/test/testbufferoverrun.cpp#L4394 https://github.com/danmar/cppcheck/ blob/main/test/testnullpointer.cpp#L3281 https://github.com/danmar/cppcheck/blob/main/test/testuninitvar.cpp#L4723
..然后是整个未使用的功能检查器。
如果您正在使用线程,那么您将不得不使用--cppcheck-build-dir
线程来使 CTU 成为可能。