首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用clang-tidy检查c++17代码

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

Stack Overflow用户
提问于 2018-01-23 22:38:15
回答 1查看 9.2K关注 0票数 10

我在Ubuntu上使用以下命令安装了clang-tidy:

代码语言:javascript
复制
sudo apt install clang-tidy

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

代码语言:javascript
复制
/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标准检查此文件?

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

代码语言:javascript
复制
clang++-5.0 --std=c++17 ptr.cpp
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-24 03:35:56

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

我猜想-std=c++17 (或-std=c++1z)没有在用于编译ptr.cpp的C++编译器标志中指定,所以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 (在Ubuntu16.04上,通过apt安装的默认clang-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

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48404289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档