什么是压制“未使用variablesx”的最好方法 – 警告

什么是压制一个编译器(在这种情况下gcc)像“未使用的variablesx”最好/最好的方法 – 警告?

我不想给gcc某些标志去除所有这些警告,只是为了特殊情况。

find一篇文章http://sourcefrog.n​​et/weblog/software/languages/C/unused.html ,解释UNUSED。 有趣的是,作者还破坏了未使用的variables名,所以你不能在以后不经意间使用它。

摘抄:

 #ifdef UNUSED #elif defined(__GNUC__) # define UNUSED(x) UNUSED_ ## x __attribute__((unused)) #elif defined(__LCLINT__) # define UNUSED(x) /*@unused@*/ x #else # define UNUSED(x) x #endif void dcc_mon_siginfo_handler(int UNUSED(whatsig)) 

(void) variable可能适用于某些编译器。

对于C ++代码,请参阅http://herbsutter.com/2009/10/18/mailbag-shutting-up-compiler-warnings/其中Herb Sutterbuild议使用:

 template<class T> void ignore( const T& ) { } ... ignore(variable); 

不要给这个variables一个名字(C ++)

 void foo(int /*bar*/) { ... } 

使用编译器特定的非标准机制告诉编译器

查看__attribute__((unused)) ,各种#pragma的个别答案。 可选地,在它周围包装一个preprocesormacros以实现可移植性。

closures警告

IDE可以通过视觉(不同的颜色或下划线)表示未使用的variables。 有了这些,编译器警告可能是没用的。

在GCC和Clang中,在命令行末尾添加-Wno-unused-parameter选项(在切换未使用的参数警告的所有选项之后,如-Wall-Wextra )。

添加一个强制转换为void

 void foo(int bar) { (void)bar; } 

根据jamesdlin的回答和http://herbsutter.com/2009/10/18/mailbag-shutting-up-compiler-warnings/

如果这真的是你想要的,你可以使用未使用的属性(仅限gcc),如下所示:

 void foo(int __attribute__((__unused__)) bar) { ... } 

当然不只是函数参数,但是这是最常见的用例,因为它可能是一个API的callback函数,而实际上并不需要所有的input。

此外,GLib有一个G_GNUC_UNUSEDmacros,我相信扩展到该属性。

您可以使用#pragma使警告#pragma

 #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wunused" int unususedVariable = 1; #pragma clang diagnostic pop 

如果您使用的是GCC,请使用#pragma gcc ...

#pragma unused <variable>

这是一个非常黑客的解决scheme,但你是否尝试简单地分配variables本身? 我认为这应该欺骗大多数编译器认为使用variables。 应该也相当便携。

分配给自己。

 void f(int unused) { unused = unused; } 

在海湾合作委员会工作,但铿锵声需要-Wno自我分配。

转换为void是最好的方法,因为它表明你没有“意外”地将variables保存在你的代码中 – 也就是说,这个函数可能是一个你需要一个函数指针表的实例,它需要相同的参数types,返回types,但是在这个特定的表中,你没有使用参数。

也就是说,如果你不需要它,就把它除掉。 ;)

如果使用了它并且您正在运输该项目,请将其删除。 最糟糕的评论。

从代码中删除未使用的variables声明。 (双关语意)

(什么?这就是我所做的:指出显而易见的可能是最好的解决scheme。)

现在,从其他答案的评论,显然这是从macros生成的垃圾。 那么,这是一个pleonasm。

解决scheme:

  • 重构该macros以#if如果真正使用它只声明variables;
  • 创build跳过未使用的variables代的macros的另一个版本。
  • 更好的是,避免使用会给代码带来问题的macros。