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

我有一大堆编译时间断言,比如:

CASSERT(isTrue) or CASSERT2(isTrue, prefix_)

在使用 GCC 编译时,我会收到许多类似于 'prefix_LineNumber' defined but not used的警告。有没有办法可以隐藏编译时断言的警告?我没能找到海湾合作委员会的文件。我想我可能会在同一个宏中全局自动使用 var,但是我想不出任何方法来做到这一点。

有人知道怎么在海湾合作委员会隐藏这个警告吗?

101222 次浏览

-Wunused-label呢?

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

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


int VARIABLE_IS_NOT_USED your_variable;

如果不知道静态断言宏的详细信息,就很难回答这个问题。也许您可以更改为另一个宏以避免这个问题?您可以像建议的那样将“未使用”属性添加到宏,也可以使用不同形式的 CASSERT ()。

下面是一些备选方案的描述:

Http://www.jaggersoft.com/pubs/cvu11_3.html

Http://blog.kowalczyk.info/kb/compile-time-asserts-in-c.html

Http://www.pixelbeat.org/programming/gcc/static_assert.html

您可以创建一个 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);

在寻找这个问题的解决方案时看到了这个帖子。为了完整起见,我在这里发布了我找到的解决方案..。

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

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

其中每个都有一个相应的否定形式,在关闭警告的 W 后面插入“ no-”(例如,如果它是由-Wall 打开的)。因此,在您的情况下,您应该使用

-Wno-unused-function

当然,这适用于整个代码,而不仅仅是编译时断言。

这是最令人厌烦的警告之一,尽管我知道检查死代码可能(有时)很有用。但是我通常有用于调试的静态函数,或者将来某个时候可能有用的函数,或者只是临时使用的函数,我想把它们保留在代码中。

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

inline static foo()
{
}
#define UNUSED_VAR     __attribute__ ((unused))

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

UNUSED_VAR int a = 2;

通过以下指令包装此函数 所有放置在 push 和 pop 之间的代码都不会警告您未使用的函数。 所有其他代码(外推和弹出)不会受到影响。

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-function"


... your code


#pragma GCC diagnostic pop