该项目包括工具和列表,以找出Clang Compiler和GNU编译器收集的所有警告标志(C,C ++和Objective-C)。这还显示了所有的别名和警告标志,即某个标志启用(带有“#”字符的前缀),以便您可以轻松地看到哪个标志启用了哪个标志。也有警告标志出于兼容或贬值原因无能为力。它们用“#虚拟开关”文本后缀。
这些集合的目的是使使用编译器提供的静态代码分析工具更容易。
clang包括 - 所有列表中未显示的-Weverything
标志,这可以引起所有警告。 Clang文档提供了Clang中某些诊断标志的参考。
如果您需要GCC警告选项的完整列表,则对于拥有的特定版本的GCC,可以使用GCC运行gcc --help=warnings
以获取该列表。否则,一些普通的GCC警告选项列表以下可用:
此类列表的一种用例是查看不同编译器和编译器版本之间的差异。我已经提供了两个随之而来的编译器版本之间的基本编译器标志差异为diff-files,但是对于更具体的差异,您需要使用一些(视觉)diff程序,如下所示:
这将ANTLR用作解析器生成器,其中有一些支持的Python代码来解析实际编译器选项数据文件中的警告标志。其他要求也遵循(加上其依赖性):
安装了所有要求并能够使用antlr4
命令运行ANTLR之后,只需在parsers/
目录中使用以下命令即可自己生成这些列表:
ninja
./parse-clang-diagnostic-groups.py <path-to-clang-source>/include/clang/Basic/DiagnosticGroups.td
./parse-gcc-warning-options.py <path-to-gcc-source>/gcc/{common.opt,c-family/c.opt}
并且您将获得所需编译器版本中所有单独警告标志及其依赖项的列表。
要生成过滤列表,您可以使用--top-level
和--unique
开关。
--top-level
交换机不包括列表中其他一些开关启用的警告。--unique
列出了所有警告,而没有任何信息,他们启用了其他警告。此页面上的差异是从这些文件创建的。 有一些单元测试测试低级功能。您可以使用parsers/
Directory中的ninja test
命令运行时间来验证该单元测试通过。
当解析器获得会影响格式化或其他输出的更改时,需要重新创建这些警告列表。有process-clang-git.sh
和process-gcc-git.sh
脚本将git存储库根作为其第一个参数,并应用这些命令的所有不同变体来创建最终文本文件。