13

我们想开始-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

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

有什么建议么?谢谢。

4

3 回答 3

1

以编译单元/模块/库为基础而不是按警告分阶段怎么样?触发子目标编译是否是一种选择(一个足够好的构建系统)?

于 2013-05-10T11:42:48.697 回答
0

这可能是愚蠢的,但...

为什么不是一个简单的 grep ?

就像是

 gcc teste.c 2>&1 | grep -v 'comparison of distinct' | grep -v 'some_other_string'

您可能希望将这些 grep 隐藏在脚本中,并从您的 makefile 而不是 gcc 调用脚本

于 2013-05-21T15:24:14.167 回答
0

根据https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43245它将是“-Wdiscarded-qualifiers”,但由于错误修复条目是从 2014 年 5 月 1 日开始,所以你是 gcc 编译器using 可能不支持它。

于 2014-11-04T23:55:07.353 回答