当前位置:  开发笔记 > 编程语言 > 正文

如何在GCC中隐藏"已定义但未使用"的警告?

如何解决《如何在GCC中隐藏"已定义但未使用"的警告?》经验,为你挑选了5个好方法。

我有一堆编译时断言,例如:

CASSERT(isTrue) or CASSERT2(isTrue, prefix_)

在使用GCC进行编译时,我会收到很多警告'prefix_LineNumber' defined but not used.有没有办法可以隐藏编译时断言的警告?我没有运气搜索GCC文档.我以为我可能会在同一个宏中全局自动使用var,但我想不出有任何办法.

有谁知道在GCC中隐藏警告的方法?



1> 小智..:

刚刚在搜索此问题的解决方案时看到了这个帖子.我在这里发布完整性我发现的解决方案...

控制未使用警告的GCC编译器标志包括:

-Wunused-function
-Wunused-label
-Wunused-parameter
-Wunused-value
-Wunused-variable
-Wunused (=all of the above)

这些中的每一个都有一个相应的否定形式,在W之后插入"no-",关闭警告(例如,如果它被-Wall打开).因此,在您的情况下,你应该使用

-Wno-unused-function

当然,这适用于整个代码,而不仅仅是编译时断言.有关特定于功能的行为,请查看Function属性.



2> 小智..:

GCC的解决方案不会导致与其他编译器的冲突

#ifdef __GNUC__
#define VARIABLE_IS_NOT_USED __attribute__ ((unused))
#else
#define VARIABLE_IS_NOT_USED
#endif

int VARIABLE_IS_NOT_USED your_variable;


这也正是在gcc源代码中针对未使用的函数参数完成的操作。+1 :)
我发现使用____attribute____((____ unused____))适用于GCC 4.xx

3> Adam Rosenfi..:

您可以创建一个null语句并将结果转换为void.这可以在编译器之间移植,即使使用-Wall-Wextra启用,gcc也不会给你任何警告.例如:

int var;    // var is not used
(void)var;  // null statement, cast to void -- suppresses warning

一种常见的技术是为此创建一个宏:

#define UNUSED(x) ((void)(x))

int var;
UNUSED(var);



4> 小智..:

这是最令人讨厌的警告之一,虽然我认为检查死代码可能有用(有时).但是我通常有用于调试的静态函数,或者将来某些时候可能有用的函数,或者只是临时使用的函数,我想将它们保存在代码中.

幸运的是,此警告并不关心内联函数.

inline static foo()
{
}


内联只是我需要的解决方法,谢谢.
那你为什么不在预处理器指令中包装这些函数呢?例如`#ifdef UNIT_TEST static foo()`?

5> 小智..:
#define UNUSED_VAR     __attribute__ ((unused))

对于任何变量,只需在其类型之前使用上面的宏,例如:

UNUSED_VAR int a = 2;


我们已经采用了这个项目.但是,仅适用于编译器在其警告中出错的情况.例如,我们有一些只能由指针访问的变量,因此编译器认为它们未被使用.可以接受警告,但必须从我们的代码中删除真正未使用的变量.
推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有