抑制编译器(在本例中为gcc)的最佳/最佳方法是什么,例如“未使用的变量x” - 警告?
我不想给gcc提供任何特定的标志来删除所有这些警告,仅用于特殊情况。
答案 0 :(得分:43)
(void) variable
可能适用于某些编译器。
对于C ++代码,另请参阅Herb Sutter建议使用的http://herbsutter.com/2009/10/18/mailbag-shutting-up-compiler-warnings/:
template<class T> void ignore( const T& ) { }
...
ignore(variable);
答案 1 :(得分:22)
找到一篇解释UNUSED的文章http://sourcefrog.net/weblog/software/languages/C/unused.html。有趣的是,作者还破坏了未使用的变量名称,因此您将来不会无意中使用它。
摘录:
#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))
答案 2 :(得分:22)
void foo(int /*bar*/) {
...
}
查看__attribute__((unused))
,各种#pragma
等的个别答案。 (可选)在其周围包装一个预处理器宏以便于移植。
IDE可以直观地显示未使用的变量(不同的颜色或下划线)。有了这个,编译器警告可能会毫无用处。
在GCC和Clang中,在命令行末尾添加-Wno-unused-parameter
选项(在所有切换未使用参数警告的选项之后,如-Wall
,-Wextra
)。
void foo(int bar) {
(void)bar;
}
根据jamesdlin的回答和http://herbsutter.com/2009/10/18/mailbag-shutting-up-compiler-warnings/
答案 3 :(得分:12)
如果这真的是你想要的,你可以使用未使用的属性(仅限gcc),如:
void foo(int __attribute__((__unused__)) bar) {
...
}
当然,不仅仅是函数参数,而且这是最常见的用例,因为它可能是API的回调函数,您实际上并不需要所有输入。
此外,GLib有一个G_GNUC_UNUSED宏,我相信它会扩展到该属性。
答案 4 :(得分:11)
您可以使用#pragma
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused"
int unususedVariable = 1;
#pragma clang diagnostic pop
如果您使用的是GCC,请使用#pragma gcc ...
答案 5 :(得分:3)
#pragma unused <variable>
答案 6 :(得分:2)
这是一个非常讨厌的解决方案,但您是否尝试简单地将变量分配给自己?我认为这应该欺骗大多数编译器认为使用变量。应该也很便携。
答案 7 :(得分:0)
投射到虚空是最好的方法,因为它表明你没有意外地&#34;将变量保存在代码中 - 即:此函数可能是一个实例,其中有一个需要相同参数类型和返回类型的函数指针表,但在此特定表条目中,您没有使用该参数。
那就是说,如果你不需要它,摆脱它。 ;)
答案 8 :(得分:-1)
将其分配给自己。
import scrapy
class Funda1Spider(scrapy.Spider):
name = "funda1"
allowed_domains = ["funda.nl"]
def __init__(self, place='amsterdam'):
self.start_urls = ["http://www.funda.nl/koop/%s/" % place]
def parse(self, response):
filename = response.url.split("/")[-2] + '.html'
with open(filename, 'wb') as f:
f.write(response.body)
在gcc中工作,但是clang需要-Wno-self-assign。
编辑:我现在认为转换为无效是最便携的解决方案:gcc和clang都明白这一点,即使有完整的警告scrapy crawl funda1 -a place=rotterdam
:
rotterdam.html
答案 9 :(得分:-9)
从代码中删除未使用的变量声明。 (双关语)
(这就是我做的事情:指出显而易见的是最好的解决方案。)
现在,从其他答案的评论来看,显然它是从宏生成的垃圾。嗯,这是一个很好的。
解决方案:
答案 10 :(得分:-9)
如果已使用并且您要运送项目,请将其删除。最糟糕的评论。