如何自动判断GCC/Clang警告是否属于-Wall或-Wextra组
自动化判断警告归属&校验方案
单条警告归属查询
GCC 环境
直接调用gcc内置的帮助查询能力,即可快速定位警告所属的启用组:
- 查询某条警告是否属于
-Wall:
输出中如果没有标注gcc -Q -Wall --help=warning=W<警告名> # 示例:查询Wc++20-designator gcc -Q -Wall --help=warning=Wc++20-designator[enabled by -Wall],即说明该警告不属于-Wall组。 - 同理替换参数为
-Wextra即可判断是否属于-Wextra组:gcc -Q -Wextra --help=warning=Wc++20-designator - 也可以直接查询警告的完整归属信息:
gcc -Q --help=warning=Wc++20-designator
Clang 环境
使用Clang内置的诊断组查询能力:
clang -print-diagnostic-groups | grep <警告名> # 示例:查询c++20-designator clang -print-diagnostic-groups | grep c++20-designator
输出会直接展示该警告对应的所有上级分组,没有Wall/Extra字段即说明不属于这两个组。
批量校验方案(100%符合核心需求)
如果需要一次性校验所有自定义关闭的警告没有误关-Wall/-Wextra的内容,直接对比两次警告列表即可,操作全自动化,编译器升级后也可以直接复用:
- 生成仅开启
-Wall -Wextra时的所有启用警告列表:# GCC 环境 gcc -Q -Wall -Wextra --help=warnings | grep '\[enabled\]' | awk '{print $1}' | sort > wall_wextra.list # Clang 环境 clang -Q -Wall -Wextra --help=warnings | grep '\[enabled\]' | awk '{print $1}' | sort > wall_wextra.list - 生成你当前使用的完整编译参数对应的启用警告列表(把你所有
-Wno-xxx、-pedantic等参数都加进去):# 示例(替换成你实际的编译参数) gcc -Q -Wall -Wextra -pedantic -Wno-c++20-designator --help=warnings | grep '\[enabled\]' | awk '{print $1}' | sort > current.list - 对比两个列表的差异:
如果没有任何输出,说明你关闭的所有警告都不属于diff wall_wextra.list current.list-Wall/-Wextra组,符合要求;如果有输出,差异项就是被你误关的-Wall/-Wextra警告,直接调整编译参数即可。
内容的提问来源于stack exchange,提问作者user1011113
相关产品推荐
相关产品推荐

