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

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

CASSERT(isTrue) or CASSERT2(isTrue, prefix_) 

当使用GCC编译时,我得到了许多警告,比如'prefix_LineNumber' defined but not used 。 有没有办法可以隐藏编译时断言的警告? 我没有运气searchGCC文档。 我以为我可能有自动在全球范围内使用同一个macros,但我想不出有任何办法做到这一点。

有没有人知道在GCC中隐藏该警告的方法?

刚刚看到这个线程,同时寻找解决这个问题。 我在这里发布完整性的解决scheme,我发现…

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

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

每一个都有一个相应的否定forms,在closures警告的W之后插入“no-”(例如,在被-Wall打开的情况下)。 因此,在你的情况下,你应该使用

 -Wno-unused-function 

当然这适用于整个代码,而不仅仅是编译时断言。 对于特定于函数的行为,请查看函数属性 。

GCC解决scheme不会与其他编译器产生冲突

 #ifdef __GNUC__ #define VARIABLE_IS_NOT_USED __attribute__ ((unused)) #else #define VARIABLE_IS_NOT_USED #endif int VARIABLE_IS_NOT_USED your_variable; 

您可以创build一个空语句,并将结果转换为void。 这在编译器中是可移植的,即使启用了-Wall-Wextra ,gcc也不会给你任何警告。 例如:

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

一个常见的技术是为此创build一个macros:

 #define UNUSED(x) ((void)(x)) int var; UNUSED(var); 

这是最恼人的警告之一,虽然我不敢肯定它可能有用(有时)检查死代码。 但是我通常有用于debugging的静态函数,或者将来某个时候可能有用的函数,或者只是暂时使用的函数,并且我希望将它们保留在代码中。

幸运的是,这个警告并不关心内联函数。

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

对于任何variables只是在它的types之前使用上面的macros,例如:

 UNUSED_VAR int a = 2; 

如果不知道静态声明macros的细节,这很难回答。 也许你可以换一个不同的macros来避免这个问题? 您可以按照build议将“未使用”属性添加到macros,也可以使用不同forms的CASSERT()。

这里有几个select的描述:

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

怎么-Wunused-label