如何在minGW中禁用Eclipse中的未使用变量警告?

时间:2013-05-14 15:36:54

标签: c++ eclipse pragma

如何在minGW中用C ++禁用以下警告?

warning: unused variable 'x' [-Wunused-variable]

在Eclipse CDT中,我找不到警告编号:

../src/subfolder/ClassTwo.cpp:20:8: warning: unused variable 'x' [-Wunused-variable]

我试过这样做:

#pragma warning(push)
#pragma warning(disable: ?) //which number?
#include "subfolder/ClassTwo.h"
#pragma warning(pop)

但它不起作用。

我的问题:

  1. 如何在Eclipse CDT中获取此警告编号?
  2. 如何编写pragma指令?

3 个答案:

答案 0 :(得分:6)

由于它几乎总是很容易修复“未使用的变量”警告,我更倾向于修复实际的代码,而不是试图用pragma修补它(这可能会隐藏其他未来的错误 - 例如你添加一个新功能:

 int foo(int x, int y)
 {
      return x * x;
 }

哎呀,这是一个错字,它应该是return x * y; - 一个警告会告诉你这是事实。

通过删除参数名称来处理未使用的参数:

 int foo(int x, int)  // Second parameter, y is not used
 {
      return x * x; 
 }

如果它是局部变量,那么您可以使用(void)y(可能在宏中)来“伪造它”:

 int bar(int x)
 {
    int y;    // Not used. 
    (void)y;
 }

 #define NOT_USED(x) (void)(x)

      int bar(int x)
 {
    int y;    // Not used. 
    NOT_USED(y);
 }

答案 1 :(得分:3)

它看起来像是clang的输出。您可以使用此处概述的方法使用clang实现相同的操作:http://clang.llvm.org/docs/UsersManual.html#controlling-diagnostics-via-pragmas

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-variable"
#include "subfolder/ClassTwo.h"    
#pragma clang diagnostic pop

如果这是您的源文件,那么只需fix the warning

对于GCC,您可以使用:Selectively disable GCC warnings for only part of a translation unit?

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-variable"
#include "subfolder/ClassTwo.h"
#pragma GCC diagnostic pop

当然,这会给你留下大量的pragma噪音 - 如果这是一件坏事就有争议=)

答案 2 :(得分:3)

您似乎在使用Microsoft C ++样式的pragma语法和GCC编译器。 “警告号”(至少以该格式)的概念也是Microsoft C ++特有的。换句话说,这在GCC中不起作用。

没有用于禁用/启用警告的标准语法,因此每个编译器都将使用自己的语法。这意味着没有办法“在C ++中”(引用你的标题)。在每个特定的编译器中只有这样的方法。您必须查阅编译器文档。

在GCC中,您应该能够通过命令行选项-Wno-unused-variable执行此操作,并禁用整个翻译单元的所有此类警告。此外,在GCC中,您实际上可以通过__attribute__((unused))选择性地将变量标记为未使用,以禁止对该特定变量发出警告。

http://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html#Variable-Attributes