5

How can I disable the following warning in C++ in minGW?

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

In Eclipse CDT, I can't locate the warning number:

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

I tried doing this:

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

But it didn't work.

My questions:

  1. How can I get the warning number of this in Eclipse CDT?
  2. How should the pragma directive be written?
4

3 回答 3

6

由于修复“未使用的变量”警告几乎总是很容易,因此我更愿意修复实际代码而不是尝试用编译指示修补它(这也可能隐藏其他未来的错误 - 例如您添加一个新功能:

 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);
 }
于 2013-05-14T15:47:29.090 回答
3

您似乎在 GCC 编译器中使用 Microsoft C++ 风格的编译指示语法。“警告编号”的概念(至少在那种格式中)也是 Microsoft C++ 特有的。换句话说,这在 GCC 中不应该工作。

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

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

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

于 2013-05-14T15:45:50.333 回答
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

如果那是您的源文件,那么只需修复警告

对于 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

当然,这会给你留下大量的杂注噪音——如果这是一件坏事,值得商榷=)

于 2013-05-14T15:41:16.653 回答