You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让clang-tidy按照C++17标准检查Ubuntu环境下的C++代码?

解决clang-tidy未按C++17标准检查代码的问题

我来帮你搞定这个问题~你遇到的情况是因为clang-tidy默认没有自动使用C++17标准,虽然你编译时给clang加了--std=c++17,但clang-tidy并不会自动继承这个设置,所以它用了更老的标准去检查代码,才会出现auto是C11扩展、make_unique未声明的错误。

下面给你几个实用的解决办法:

方法一:直接给clang-tidy指定标准参数

运行clang-tidy时显式加上--std=c++17参数,注意最后要加--来分隔clang-tidy自身的参数和传递给编译器的参数:

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

这样clang-tidy就会按照C++17的规则来检查你的代码了。

方法二:通过CMake配置标准(适合项目场景)

如果你的代码是用CMake管理的,可以在CMakeLists.txt里设置C++标准,clang-tidy会自动读取这个配置:

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

之后重新生成编译数据库(比如用cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..),clang-tidy就能自动用C++17标准检查了。

方法三:手动生成编译命令数据库

如果没有用CMake,也可以手动生成compile_commands.json文件,让clang-tidy读取里面的编译参数:

clang++-5.0 --std=c++17 -c ptr.cpp -o ptr.o -MJ compile_commands.json

生成这个文件后,clang-tidy会自动识别其中的--std=c++17设置,不用再手动加参数了。

试一下上面的方法,应该就能解决你的警告和错误啦~

内容的提问来源于stack exchange,提问作者Erel Segal-Halevi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:01:22