我有一大堆编译时间断言,比如:
CASSERT(isTrue) or CASSERT2(isTrue, prefix_)
在使用 GCC 编译时,我会收到许多类似于 'prefix_LineNumber' defined but not used的警告。有没有办法可以隐藏编译时断言的警告?我没能找到海湾合作委员会的文件。我想我可能会在同一个宏中全局自动使用 var,但是我想不出任何方法来做到这一点。
'prefix_LineNumber' defined but not used
有人知道怎么在海湾合作委员会隐藏这个警告吗?
-Wunused-label呢?
-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 也不会给您任何警告。例如:
-Wall
-Wextra
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