禁用默认警告的警告/错误

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)

我知道最好的解决方案是修复这些警告,但说起来容易做起来难.为了使这一改变取得成功,我们必须分阶段进行,不能一次做太多改变.

有什么建议?谢谢.

Bla*_*zor 1

在编译单元/模块/库的基础上而不是根据警告进行分阶段怎么样?触发子目标编译是一个选项(一个足够好的构建系统)吗?