如何在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)
但它不起作用。
我的问题:
答案 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