我有一个非常简单的 .c 文件,里面有一些明显的错误。
#include <stdio.h>
struct S {
int x;
};
void f(struct S s){
}
void test() {
struct S s;
f(s); // warn
}
int test2(int x){
return 5/(x-x); // warn
}
int main(){
test();
test2(532);
printf("Hej\r\r");
}
我正在尝试使用 clang 的静态代码分析器工具(scan-build)来检测错误。当我直接在文件上运行该工具时,例如使用以下命令:
扫描构建 g++ -o 1 1.c
我确实得到了预期的输出,包括来自编译器的警告,其中提到了除以 0。
scan-build: 使用 '/usr/lib/llvm-3.8/bin/clang' 进行静态分析
1.c:在函数'int test2(int)'中:1.c:16:11:警告:除以零[-Wdiv-by-zero]返回5/(xx);^
1.c:16:11:警告:除以零返回 5/(xx);
~^~~~~~ 1 个警告生成。扫描构建:发现 1 个错误。scan-build:运行“scan-view /tmp/scan-build-2016-07-11-152043-3028-1”来检查错误报告。
现在,我正在尝试将该命令放入一个非常简单的 Makefile 中。我的 Makefile 的内容是:
all: 1.c
g++ -o 1 1.c
clean:
rm -f *.o 1
但是,每当我使用 make 运行 scan-build 时,使用以下命令:
扫描构建
我仍然收到来自编译器的警告,但不是扫描构建工具!!!
scan-build: 使用 '/usr/lib/llvm-3.8/bin/clang' 进行静态分析
g++ -o 1 1.c
1.c:在函数'int test2(int)'中:
1.c:16:11:警告:除以零 [-Wdiv-by-zero] 返回 5/(xx);
^ scan-build:删除目录'/tmp/scan-build-2016-07-11-152326-3055-1',因为它不包含任何报告。扫描构建:没有发现错误。
我在 C 和 C++ 文件中都观察到了相同的行为。我看到有人在过去(2012 年)遇到过类似的错误,但是建议的答案似乎不起作用,而且似乎只引用了 C++ 文件。有什么线索吗?