60 gcc warnings compiler-warnings
我有一堆编译时断言,例如:
CASSERT(isTrue) or CASSERT2(isTrue, prefix_)
Run Code Online (Sandbox Code Playgroud)
在使用GCC进行编译时,我会收到很多警告'prefix_LineNumber' defined but not used
.有没有办法可以隐藏编译时断言的警告?我没有运气搜索GCC文档.我以为我可能会在同一个宏中全局自动使用var,但我想不出有任何办法.
有谁知道在GCC中隐藏警告的方法?
小智 95
刚刚在搜索此问题的解决方案时看到了这个帖子.我在这里发布完整性我发现的解决方案...
控制未使用警告的GCC编译器标志包括:
-Wunused-function
-Wunused-label
-Wunused-parameter
-Wunused-value
-Wunused-variable
-Wunused (=all of the above)
Run Code Online (Sandbox Code Playgroud)
这些中的每一个都有一个相应的否定形式,在W之后插入"no-",关闭警告(例如,如果它被-Wall打开).因此,在您的情况下,你应该使用
-Wno-unused-function
Run Code Online (Sandbox Code Playgroud)
当然,这适用于整个代码,而不仅仅是编译时断言.有关特定于功能的行为,请查看Function属性.
小智 47
GCC的解决方案不会导致与其他编译器的冲突
#ifdef __GNUC__
#define VARIABLE_IS_NOT_USED __attribute__ ((unused))
#else
#define VARIABLE_IS_NOT_USED
#endif
int VARIABLE_IS_NOT_USED your_variable;
Run Code Online (Sandbox Code Playgroud)
Ada*_*eld 32
您可以创建一个null语句并将结果转换为void.这可以在编译器之间移植,即使使用-Wall
和-Wextra
启用,gcc也不会给你任何警告.例如:
int var; // var is not used
(void)var; // null statement, cast to void -- suppresses warning
Run Code Online (Sandbox Code Playgroud)
一种常见的技术是为此创建一个宏:
#define UNUSED(x) ((void)(x))
int var;
UNUSED(var);
Run Code Online (Sandbox Code Playgroud)
小智 30
这是最令人讨厌的警告之一,虽然我认为检查死代码可能有用(有时).但是我通常有用于调试的静态函数,或者将来某些时候可能有用的函数,或者只是临时使用的函数,我想将它们保存在代码中.
幸运的是,此警告并不关心内联函数.
inline static foo()
{
}
Run Code Online (Sandbox Code Playgroud)
Sas*_*tin 13
通过以下指令包装此函数所有放置在push 和pop 之间的代码都不会警告您有关未使用的函数。所有其余代码(push 和 pop 之外)都不会受到影响。
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-function"
... your code
#pragma GCC diagnostic pop
Run Code Online (Sandbox Code Playgroud)
小智 7
#define UNUSED_VAR __attribute__ ((unused))
Run Code Online (Sandbox Code Playgroud)
对于任何变量,只需在其类型之前使用上面的宏,例如:
UNUSED_VAR int a = 2;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
83725 次 |
最近记录: |