gpt4 book ai didi

c++ - Klocwork(或其他工具)能否识别类型、typedef 和#define 指令?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:38:55 25 4
gpt4 key购买 nike

我使用 looking for 工具来解决 help detect 错误,这些错误阻止程序作为 64 位代码正常运行。最近,我一直在玩弄 Klocwork 及其自定义跳棋功能,它让我可以使用 XPath 将源代码作为树来导航。这作为正则表达式的“更智能”替代方案很有用,但我无法让它识别类型。

例如,假设我想找到使用 intlongfor 循环的每个实例数数。下面的代码很容易找到。

for (int i = 0; i < 10; i++)
// ...

搜索这段代码很简单,因为变量定义就在循环内部。但是,请考虑以下示例。

int i;
// ...
for (i = 0; i < 10; i++)
// ...

这很难找到,因为变量定义与循环是分开的,而且必要的 XPath 表达式要么笨拙,要么容易出错。

那么,自定义 Klocwork 规则能否在需要类型识别的地方找到像这样的表达式,包括解析 typedef#define 语句?是否有其他工具可以做到这一点?

编辑 1:考虑以下示例。

typedef int myint;

void Foo() {
int i;
for (i = 0; i < 10; i++) {
Bar();
}

myint j;
for (j = 0; j < 10; j++) {
Bar();
}
}

solution provided by ahmeddirie 找到了第一个循环,因为i 的类型明确定义为int。但是,找不到第二个循环,因为 typedef 已经掩盖了底层类型。哪些工具以某种方式跟踪类型,将第二个循环变量 j 识别为确实是一个 int

最佳答案

您可以使用 Clang ( http://clang.llvm.org ) 甚至 Elsa ( https://github.com/dsw/oink-stack/ ) 在类型传播和模板实例化之后生成 AST。两者都提供了一个不错的 C++ API 和一些将 AST 转储为可读文本的方法。这两个选项都是免费

关于c++ - Klocwork(或其他工具)能否识别类型、typedef 和#define 指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6443223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com