使用 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
我在 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