为 gcc 沉默 Wunused 变量

silencing Wunused-variable for gcc

这是我的代码:

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-variable"
//__attribute__((unused))
static int myVar = 5;
#pragma GCC diagnostic pop

并且在使用 -Wall 编译时我收到了警告。但是当我使用该属性时,我没有得到它。

为什么编译指示不起作用?我没有收到无法识别的标志的警告。其他 Whosebug 线程将我指向 pragma 内容...

使用gcc (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 5.3.0

编辑: 我在 gcc 文档中读到这个:

pragma GCC diagnostic kind option

Modifies the disposition of a diagnostic. Note that not all diagnostics are modifiable; at the moment only warnings (normally controlled by ‘-W...’) can be controlled, and not all of them. Use -fdiagnostics-show-option to determine which diagnostics are controllable and which option controls them.

但我仍然不明白如何知道是否可以用 pragma 抑制警告 - 即使我从输出中得到 [-Wunused-variable]...

您遇到的问题似乎是关于未使用变量的警告是在处理完整个编译单元后发出的,而不是在声明时发出的。因此,在声明点上激活警告抑制根本没有任何作用,然后当您将其弹出时,警告在实际重要的点上不会被忽略;即文件结束后。

删除 pushpop 指令确实可以抑制警告。此外,将 diagnostic ignored 指令移动到文件末尾时,警告仍然被抑制。