Подтвердить что ты не робот

Отключить предупреждение/ошибку для предупреждений по умолчанию

Мы хотим начать использовать -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

Я знаю, что лучше всего исправить эти предупреждения, но это гораздо проще сказать, чем сделать. Чтобы это изменение было успешным, мы должны сделать это поэтапно и не можем делать слишком много изменений сразу.

Любые предложения? Спасибо.

4b9b3361

Ответ 1

Как насчет того, чтобы поэтапный отказ от блока компиляции/модуля/библиотеки вместо предупреждения? Является ли запуск компиляции подзаголовком (достаточно хорошая система сборки)?

Ответ 2

Это может быть глупость, но...

Почему не простой grep?

что-то вроде

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

Вероятно, вы хотите скрыть эти greps в script и вызвать script из вашего файла makefile вместо gcc

Ответ 3

Согласно https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43245, это будет "-Wdiscarded-qualifiers", но поскольку запись с исправлением ошибок с 1 мая 2014 года, используемый вами компилятор gcc может не поддерживать его.