在 clang 16.0 之前,我能够使用 -Weveything 毫无问题地编译所有项目,\n修复我的代码并注意此选项给出的(有用的)警告。\n但是,似乎添加了 -Wunsafe-buffer-usage在版本 16 中(我的系统最近更新到了它)\n如果没有得到关于正在使用的任何指针的大量无用警告,则不可能编译任何项目,请参阅下面的最小示例:
\n$ cat main.c\n#include <stdio.h>\n\nint main(int argc, char **argv) {\n if (argc != 2) {\n return 0;\n }\n printf("argv[1] = %s\\n", argv[1]);\n}\n\n$ clang -Weverything main.c\nmain.c:3:27: warning: 'argv' is an unsafe pointer used for buffer access [-Wunsafe-buffer-usage]\nint main(int argc, char **argv) {\n ~~~~~~~^~~~\nmain.c:7:30: note: used in buffer access here\n printf("argv[1] = %s\\n", argv[1]);\n ^~~~\n1 warning generated.\nRun Code Online (Sandbox Code Playgroud)\n人们不可能使用此警告来推理他的代码。
\nclang 文档有以下内容:
\n\n由于 -Weverything 启用每个诊断,因此我们通常不建议使用它。-Wall -Wextra 对于大多数项目来说是更好的选择。使用 -Weverything 意味着更新编译器更加困难,因为您\xe2\x80\x99 暴露于实验诊断,其质量可能低于默认诊断。如果您确实使用 -Weverything,那么我们建议您在添加到 …