如何隐藏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
怎么-Wunused-label
?