这是我的代码:
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-variable"
//__attribute__((unused))
static int myVar = 5;
#pragma GCC diagnostic pop
当用-Wall
编译时,我收到警告。但是,当我使用该属性时,我无法得到它。
为什么pragma的东西不起作用?我没有得到一个无法识别的标志的警告。其他stackoverflow线程指向我的pragma东西......
使用gcc (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 5.3.0
修改 我在gcc文档中读到了这个:
pragma GCC诊断类选项
修改诊断的处置。请注意,并非所有诊断都可以修改;目前只有警告(通常由'-W ......'控制)可以控制,而不是所有警告。使用-fdiagnostics-show-option确定哪些诊断是可控制的,哪个选项控制它们。
但是我仍然不明白如何知道是否可以用pragma来抑制警告 - 即使我从输出中得到[-Wunused-variable]
......
答案 0 :(得分:3)
您遇到的问题似乎是,在处理完整个编译单元后,而不是在声明时,会发出有关未使用变量的警告。因此,在声明点处激活警告抑制功能根本不会发生任何事情,当您将其弹出时,警告在其实际重要的位置不会被忽略;也就是说,在文件结束之后。
删除push
和pop
指令会使警告被抑制。此外,将diagnostic ignored
指令移动到文件末尾时,警告仍会被禁止。