什么是压制“未使用variablesx”的最好方法 – 警告
什么是压制一个编译器(在这种情况下gcc)像“未使用的variablesx”最好/最好的方法 – 警告?
我不想给gcc某些标志去除所有这些警告,只是为了特殊情况。
find一篇文章http://sourcefrog.net/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。