ugo*_*ren 13 c gcc suppress-warnings
我们想要开始使用-Wall -Werror
大型项目.
由于尺寸的原因,这种变化必须分阶段进行,我们首先要从最重要的警告开始.
最好的方法似乎是使用-Wall -Werror
,特殊警告的例外情况.特别的警告是我们有很多(因此修复所有这些都很难和冒险),我们认为它们不是很危险.
我不是说我们不想解决所有这些警告 - 只是没有在第一阶段.
我知道有两种方法可以排除警告-Werror
- 最好的是-Wno-error=xxx
,如果它不起作用 - -Wno-xxx
(当然,我们更愿意看到警告并忽略它,而不是隐藏它).
我的问题是默认情况下启用的警告,并且没有-Wxxx
与它们相关的标志.使用时我找不到任何方法来全部使用它们-Werror
.
我特别关注两个具体的警告.这是一个展示它们和编译器输出的程序:
#include <stdio.h>
void f(int *p) { printf("%p\n", p); }
int main(int argc, char *argv[]) {
const int *p = NULL;
const unsigned int *q = NULL;
f(p); /* Line 7: p is const, f expects non const */
if (p == q) { /* Line 8: p is signed, q is unsigned */
printf("Both NULL\n");
}
return 0;
}
% gcc warn.c
warn.c: In function 'main':
warn.c:7: warning: passing argument 1 of 'f' discards qualifiers from pointer target type
warn.c:8: warning: comparison of distinct pointer types lacks a cast
Run Code Online (Sandbox Code Playgroud)
我知道最好的解决方案是修复这些警告,但说起来容易做起来难.为了使这一改变取得成功,我们必须分阶段进行,不能一次做太多改变.
有什么建议?谢谢.