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
标志却有所不同。我在这里错过了什么吗?任何帮助表示赞赏!
我正在尝试通过索引查找来实现用于设置各种代码元素的引用“表”。大多数基础变量都是double
,但有一些是不同的类型,例如unsigned char
。
这是一个简化的示例:
static unsigned char foo = 0; // Variable to set
static unsigned double bar = 0.0; // Variable to set
...
struct tableEntry {
double& ref; // Reference to one of the above
double min;
double max;
};
struct tableEntry entries[] {
{ bar, 0.0, 1.0 },
{ (double&)foo, 0x0, 0xff },
};
Run Code Online (Sandbox Code Playgroud)
尝试通过表格分配栏时,一切正常。
entries[0].ref = 1.0;
Run Code Online (Sandbox Code Playgroud)
这导致entries[0].ref == 1.0
, 和bar == 1.0
,正如预期的那样。但是,当通过表分配 foo 时......
entries[1].ref = 1.0;
Run Code Online (Sandbox Code Playgroud)
这会以某种方式导致值不匹配,就好像引用无法正确解释,或者甚至没有引用正确的对象。在此分配之后, …