小编Ric*_*ski的帖子

如何执行 cppcheck 交叉翻译单元 (CTU) 静态分析?

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标志却有所不同。我在这里错过了什么吗?任何帮助表示赞赏!

c++ cppcheck

3
推荐指数
1
解决办法
1070
查看次数

是否将 C++ 引用从 unsigned char 转换为 double& 安全?

我正在尝试通过索引查找来实现用于设置各种代码元素的引用“表”。大多数基础变量都是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)

这会以某种方式导致值不匹配,就好像引用无法正确解释,或者甚至没有引用正确的对象。在此分配之后, …

c++ casting reference

2
推荐指数
1
解决办法
106
查看次数

标签 统计

c++ ×2

casting ×1

cppcheck ×1

reference ×1