我有一个非常简单的.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");
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用clang的静态代码分析工具(scan-build)来检测错误.当我直接在文件上运行该工具时,例如使用以下命令:
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个警告.scan-build:找到1个bug.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
Run Code Online (Sandbox Code Playgroud)
但是,每当我使用make运行scan-build时,使用以下命令:
scan-build make
我仍然收到编译器的警告,但不是扫描构建工具!
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 …