我有一些评论,其中有一些宏观示例。为了使它们更具可读性,我以 a 结束该行,以\\在下一行继续宏。\\如果开发人员在没有预期尾随空格的情况下复制代码,并且我们的 git 提交标准不喜欢尾随空格,我宁愿不在后面放置一个空格来消除问题。另外,我们的编码标准禁止使用多行注释(/* */),并且我们的文档使用三斜杠(///)而不是(/** ... */)样式注释。我们的编译器已-Wall -Werror设置,所以我想暂时禁用此错误。示例代码如下:
#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored "-Wcomment"\n// boo \\\n// hoo\n#pragma GCC diagnostic pop\nRun Code Online (Sandbox Code Playgroud)\n\n不幸的是,编译器仍然抱怨这个错误。我们使用的是 7.5,但这在最新的 12.2 下仍然不起作用。
\n文档说:
\n\n\n\n
#pragma GCC diagnostic kind option修改诊断的处置。请注意,并非所有诊断都可以修改;目前只能控制警告(通常由 \xe2\x80\x98-W\xe2\x80\xa6\xe2\x80\x99 控制),而不是全部。用于
\n-fdiagnostics-show-option确定哪些诊断是可控的以及哪个选项控制它们。
它没有说的是如何 -fdiagnostics-show-option确定哪些诊断是可控的,这很烦人。
我究竟做错了什么?
\n当一行结束时,行的拼接发生在翻译的\\第二阶段。确定什么是评论发生在第三阶段。此时,gcc 已拥有发出该警告所需的所有信息。为什么要等?
这些#pragma行在第 4 阶段进行处理,为时已晚,无法阻止相关警告。也许警告可能会被延迟,但考虑到并非所有诊断都是可修改的,我不认为仅仅为了使其受到#pragma.
\n\n它没有说的是如何
\n-fdiagnostics-show-option确定哪些诊断是可控的,这很烦人。
我认为该文档具有误导性。除了反复试验之外,我不知道如何使用此选项来确定哪些诊断是可控的。我认为它有助于确定“哪个选项控制它们”(有点\xe2\x80\x94这个选项默认打开)。此选项控制命令行选项的显示,控制发出的警告。
\n例如,使用-fdiagnostics-show-option(默认):
warning: multi-line comment [-Wcomment]\nRun Code Online (Sandbox Code Playgroud)\n使用-fno-diagnostics-show-option(否定默认值):
warning: multi-line comment\nRun Code Online (Sandbox Code Playgroud)\n因此,这对于确定特定警告的命令行选项非常有用,该选项又可用于尝试忽略该警告。如果#pramga有效,那么警告是可以通过控制的#pragma(不完全是令人兴奋的推论)。
| 归档时间: |
|
| 查看次数: |
402 次 |
| 最近记录: |