使用 clang-tidy 检查 c++17 代码

Using clang-tidy to check c++17 code

我在 Ubuntu 上安装了 clang-tidy,使用:

sudo apt install clang-tidy

我 运行 它在一个简单的 C++ 17 文件上,得到了警告和错误:

/home/erelsgl/Dropbox/ariel/CPLUSPLUS/intro/01-single-file/ptr.cpp:17:3: warning: 'auto' type specifier is a C++11 extension [clang-diagnostic-c++11-extensions]
                auto i = make_unique<int>();
                ^
/home/erelsgl/Dropbox/ariel/CPLUSPLUS/intro/01-single-file/ptr.cpp:17:12: error: use of undeclared identifier 'make_unique' [clang-diagnostic-error]
                auto i = make_unique<int>();

如何让 clang-tidy 根据 c++17 标准检查这个文件?

注意:为了构建程序,我 运行:

clang++-5.0 --std=c++17 ptr.cpp

根据您的编译器/clang-tidy 版本,用于编译源文件的默认 C++ 标准版本可能会有所不同。 clang 的默认标准版本是 gnu++-98(或从 clang 6.0 开始的 gnu++-14),通常 clang-tidy 具有与 clang 相同的默认值。

我猜测 -std=c++17(或 -std=c++1z)未在 C++ 编译器标志中指定,用于编译 ptr.cpp,因此 clang-tidy 回落到默认 -std=gnu++98,因此对 C++11 代码发出警告。

为了让 clang-tidy 处理 C++17,您应该按照@n.m 的建议指定 -std 标志,作为 -extra-arg 选项的参数,对于示例:

clang-tidy -p . ptr.cpp -extra-arg=-std=c++17

编辑:

由于 clang++-5.0 用于编译 ptr.cpp,使用匹配的 clang-tidy 版本 5.0 可能是个好主意(在 Ubuntu 16.04 上,默认的 clang-通过 apt 安装的 tidy 版本是 3.8),即:

clang-tidy-5.0 -p . ptr.cpp -extra-arg=-std=c++17

如果尚未安装,您可以从以下位置获取它:
https://www.ubuntuupdates.org/package/xorg-edgers/xenial/main/base/clang-tidy-5.0