运行 在 linux 上使用 g++ 进行 clang 扫描构建
running clang scan-build with g++ on linux
我有以下代码:
#include <iostream>
#include <memory>
using namespace std;
class A
{
public:
void foo() const;
};
void A::foo() const {}
std::unique_ptr<A> foo2()
{
std::unique_ptr<A> pa(new A());
return pa;
}
void
foo()
{
const A& ra = *foo2();
ra.foo();
}
int
main()
{
foo();
return 0;
}
我正在尝试使用 clang 的扫描构建:
scan-build g++ --std=c++11 unique_ptr.cpp
此程序使用 g++ 编译和运行良好。
我正在使用 CentOS 和 clang3.8 和 g++4.8.5。
错误信息:
error: no type named 'unique_ptr' in namespace 'std'
std::unique_ptr<A> foo2()
~~~~~^
你应该使用:
scan-build g++ -std=c++11 unique_ptr.cpp
而不是:
scan-build g++ --std=c++11 unique_ptr.cpp
-std
有效(而 --std
无效)因为 scan-build
专门检查 -std
标志。
在clang/tools/scan-build/libexec/ccc-analyzer
中:
if ($Arg =~ /^-std=/) {
push @CompileOpts,$Arg;
next;
}
我有以下代码:
#include <iostream>
#include <memory>
using namespace std;
class A
{
public:
void foo() const;
};
void A::foo() const {}
std::unique_ptr<A> foo2()
{
std::unique_ptr<A> pa(new A());
return pa;
}
void
foo()
{
const A& ra = *foo2();
ra.foo();
}
int
main()
{
foo();
return 0;
}
我正在尝试使用 clang 的扫描构建:
scan-build g++ --std=c++11 unique_ptr.cpp
此程序使用 g++ 编译和运行良好。 我正在使用 CentOS 和 clang3.8 和 g++4.8.5。
错误信息:
error: no type named 'unique_ptr' in namespace 'std'
std::unique_ptr<A> foo2()
~~~~~^
你应该使用:
scan-build g++ -std=c++11 unique_ptr.cpp
而不是:
scan-build g++ --std=c++11 unique_ptr.cpp
-std
有效(而 --std
无效)因为 scan-build
专门检查 -std
标志。
在clang/tools/scan-build/libexec/ccc-analyzer
中:
if ($Arg =~ /^-std=/) {
push @CompileOpts,$Arg;
next;
}