我们想开始-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
我知道最好的解决方案是修复这些警告,但说起来容易做起来难。为了让这个改变成功,我们必须分阶段进行,不能一次做太多的改变。
有什么建议么?谢谢。