Eri*_*hil 12
-Wextra是关于打开与其他选项相比可能不太有用或更麻烦的警告(因为它们可能会警告程序员可以接受的代码)。当您想要检查代码是否存在问题并进行更改以满足这些额外警告时,通常会使用它。
-Wpedantic是关于更严格地遵守语言标准。它警告编译器认为正常的某些语言扩展的使用,但这可能会使程序不可移植到其他编译器。
-Wpedantic强制执行 ISO C 和 ISO C++ 标准。
就我个人而言,我发现这没有帮助而且很麻烦,所以我更喜欢-Wall -Wextra -Werror而不是-Wall -Wextra -Wpedantic -Werror,因为我经常依赖 gcc 或 clang 中的编译器扩展,特别是在嵌入式系统(例如微控制器)上编程时,或者在使用寄存器进行低级工作时,二进制数据包等
以下是我在eRCaGuy_hello_world 自述文件中对此的一些注释:
\n\n\n\n
\n- 使用
\n-Wall -Wextra -Werror(这是一个好主意)查看所有警告并将所有警告转换为错误,以使您编写更好的代码。有些人可能会放弃-Wextra,而只是使用-Wall -Werror。其他人可能也想添加-Wpedantic到该列表(现在是-Wall -Wextra -Wpedantic -Werror)以强制执行 ISO C 和 ISO C++ 标准,但其他人或代码库将显式关闭 pedantic 以-Wno-pedantic显式 DISABLE pedantic(ISO 标准)检查并允许编译器扩展。就我个人而言,我更喜欢启用编译器扩展(意思是:不要使用-Wpedantic),因为编译器扩展使用非常频繁并且非常有用,特别是在小型、嵌入式、低级和以硬件为中心的系统(例如微控制器)中。\n\n
\n- 换句话说,我建议您确实使用,
\n-Wall -Wextra -Werror但不要使用-Wpedantic,但如果您也想使用-Wpedantic,则可以。请参阅下文了解更多详细信息。- 有关哪些警告标志
\n-Wall以及-Wextra每个警告标志打开的详细信息,请参阅此处的 gcc 用户手册 ( https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html ),并在页面中搜索这些警告,或者只是向下滚动一半。有一个很好的列表,详细说明了每个(-Wall、 和-Wextra)下的各个警告标志。- 添加
\n-Wpedantic或-pedantic(相同的)构建标志以强制执行严格的 ISO C 或 ISO C++ 标准并“拒绝所有使用禁止扩展的程序”。或者,相反,添加-Wno-pedantic启用扩展并关闭先前设置的扩展-Wpedantic。-Wpedantic默认情况下不打开。例如,请参阅 gcc 用户手册中有关警告选项的部分以及上面的项目符号,了解详细信息: https: //gcc.gnu.org/onlinedocs/gcc/Warning-Options.html。\n\n
\n- 有些人只想要严格的 ISO C 和 C++ 功能。他们使用
\n-Wpedantic。- 某些库需要编译器扩展,并明确
\n-Wno-pedantic设置库以启用编译器扩展并禁用任何先前设置的-Wpedantic标志。有时,这仅适用于需要例外才能使用某些编译器扩展的某些文件。- 其他人依赖编译器扩展并且不使用
\n-Wpedantic. 我属于后一类,并且不喜欢使用-Wpedantic,这样我就可以使用 gcc (或 clang)编译器扩展。他们很好。他们很安全。他们很有帮助。它们只是可能不太能跨编译器移植,尽管从 gcc 到 clang 又回来,您通常可以使用它们,因为 clang 在设计上努力与 gcc 兼容(请参阅http://clang.llvm)。 org/:clang 努力与 gcc 兼容:他们宣传的“最终用户功能”包括:“GCC 兼容性”)。- \n
-Wpedantic另请参阅我在上面的上一个更高级别项目符号中的注释。- clang,但不是 gcc,也有一个
\n-Weverything选项,似乎包含诸如-Wpedantic. 您可以在这里测试它: https: //godbolt.org/z/qcYKd1。请注意-Wvla-extension我们收到的警告,因为在本例中我们依赖于 C++ 中的 C99 扩展,并且我们已经-Weverything设置了。如果我们只使用-Wpedantic,我们会得到相同的警告,如下所示: https: //godbolt.org/z/M9ahE4,表明-Weverything实际上包含-Wpedantic。如果我们没有设置这些标志,我们不会收到警告:https: //godbolt.org/z/j8sfsY。尽管\n-Weverything在 clang 中存在并工作,但是,我在 clang 手册页和在线手册中都找不到任何有关其存在的文档: https: //clang.llvm.org/docs/DiagnosticsReference.html。\n
\n- 请注意,还有一个 clang(至少)选项来
\n-Wc99-extensions允许或-Wno-c99-extensions禁止它们。来源:https ://clang.llvm.org/docs/DiagnosticsReference.html#wc99-extensions 。- 更新:主要 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。完毕!就在那里!\n
\n\n
\n- \n
请参阅我的答案: clang 编译器的“-Weverything”选项包括什么以及它的记录在哪里?。Clang 不建议使用
\n-Weverything!他们说最好直接使用-Wall -Wextra。请参阅此处的引用(已添加重点):\n\n由于
\n-Weverything启用每个诊断,我们通常不建议使用它。-Wall -Wextra对于大多数项目来说是更好的选择。使用-Weverything意味着更新编译器更加困难,因为您\xe2\x80\x99暴露于实验性诊断,其质量可能低于默认诊断。如果您确实使用-Weverything,那么我们建议您在将所有新的编译器诊断添加到 Clang 时解决它们,方法是修复它们找到的所有内容,或者使用相应的Wno-选项显式禁用该诊断。
| 归档时间: |
|
| 查看次数: |
5224 次 |
| 最近记录: |