clang编译器的`-Weverything`选项包括什么,它在哪里记录? 附加说明:-Wpedantic == -pedantic:相关:

问题描述

clang(但不是gcc)具有一个-Weverything选项,该选项出现包括诸如-Wpedantic之类的内容。您可以在这里进行测试:https://godbolt.org/z/qcYKd1。对于我在-Weverything中作为显式编译器选项输入的位置,请参见窗口的右上方。

请注意,由于在这种情况下我们依赖C ++中的C99扩展,并且我们设置了-Wvla-extension,因此我们收到-Weverything警告。如果仅使用-Wpedantic,则会收到相同的警告,如下所示:https://godbolt.org/z/M9ahE4,表明-Weverything实际上确实包含-Wpedantic

如果我们没有设置以下两个标志,则我们将不警告:{>

尽管-Weverything存在并且可以使用clang,但是在clang手册页和此处的在线手册https://godbolt.org/z/j8sfsY中,我都找不到关于它存在的任何文档。也许我在找错地方了?我对clang的手册不是很熟悉。

那么,-Weverything包括什么以及在何处记录?

做类似-Wall -Werror -Weverything之类的事情似乎合乎逻辑,但是我不知道这与-Wall -Werror有何不同。

解决方法

浓汤!我刚刚找到了。

主要的clang文档索引页的底部:https://clang.llvm.org/docs/index.html在最底部的“索引和表”部分下,具有“搜索页”链接。使用该链接,我在这里搜索“ -Weverything”:https://clang.llvm.org/docs/search.html?q=-Weverything,这使我进入此处的官方文档!:https://clang.llvm.org/docs/UsersManual.html?highlight=weverything#cmdoption-weverything。做完了!在那里!

enter image description here

另请参阅:https://clang.llvm.org/docs/UsersManual.html?highlight=weverything#diagnostics-enable-everything

enter image description here

我真正关心的部分(强调):

由于-Weverything启用了每个诊断,因此我们通常不建议使用它。 -Wall -Wextra对于大多数项目来说是更好的选择。 -Weverything意味着更新编译器会更加困难,因为您将面临实验诊断的质量可能会比默认诊断低。如果您确实使用-Weverything,那么我们建议您解决所有新的编译器诊断问题,因为它们会被添加到Clang中,或者修复它们找到的所有内容,或者使用其相应的Wno-选项显式禁用该诊断。

因此,我的最终建议是使用-Wall -Wextra发出警告,但不要使用-Weverything,而个人使用 not -Wpedantic(或-pedantic -也是一样),因为我经常依靠gcc编译器扩展来进行低级嵌入式工作和以硬件为中心的编程,尤其是在微控制器上。

我也强烈建议使用-Werror将所有警告强制变为错误。这对于需要永久运行的安全关键代码和/或嵌入式固件特别重要,因为它会迫使您修复所有警告以使代码完全编译。因此,我的最终建议是这个,正如我在下面的github回购中进一步描述的:

# Apply "all" and "extra" warnings,and convert them all to errors
# to force you to actually abide by them!
-Wall -Wextra -Werror  

您可以在以下{@ {3}}的GitHub存储库中阅读有关该主题的更深入的见解和研究。

附加说明:-Wpedantic == -pedantic

在gcc中,它们是相同的:

-Wpedantic
-pedantic

发布严格的ISO C和ISO C ++要求的所有警告...

在clang中,它们在测试和文档中也似乎相同。 Clang也Both are listed together:“最终用户功能:” ...“ GCC兼容性”。

相关:

  1. -Wpedantic

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...