有没有gcc/Xcode的#pragma来抑制警告?

3

有没有类似于Java的@SuppressWarning注解的#pragma可以让gcc/Xcode忽略特定的警告?

我通常使用-Wall进行编译,但在某些情况下,我希望只忽略特定的警告(例如,在编写一些快速/肮脏的代码以帮助调试时)。

我不需要“修复代码”的答案。

2个回答

3

这里有一个可行的解决方案。使用#pragma GCC system_header可以让GCC以一种非常特殊的方式处理您的代码,从而抑制任何非致命的#warning

请记住,你只是欺骗了预处理器,而不是真正的编译器。大多数情况下,抑制警告可能会有害。


1
在理想的情况下,我们甚至应该将所有警告都视为错误(使用-Werror)。这就是我尽可能做到的。当涉及多个平台时会变得困难,但除此之外,警告=错误。 - Thibault Martin-Lagardette
是的,我也使用-Werror。我的问题更多是关于临时代码以帮助调试。 - nall
1
真遗憾你不能在代码块中这样做。在整个文件中进行此操作对我来说太危险了。 - Simon Woodside

2
在gcc4.6及更高版本中,您可以使用#pragma指令来抑制特定的警告,并且只对特定的代码块进行抑制,例如:
#pragma GCC diagnostic 
push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 
// Code that causes warning goes here
#pragma GCC diagnostic pop

push/pop用于保留在处理代码之前设置的诊断选项。

这比使用“#pragma GCC system_header”来抑制所有警告要好得多。(当然,在旧版gcc中,您可能会“被困”于#pragma GCC system_header方法!)

这里有一个关于抑制gcc警告的好参考:http://www.dbp-consulting.com/tutorials/SuppressingGCCWarnings.html

此页面还介绍了如何使用“-fdiagnostics-show-option”找出控制特定警告的选项。

当然,正如其他人提到的那样,通常更喜欢修复所有警告的根本原因而不是抑制它们!但是,有时这是不可能的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接