Ответ 1
Как насчет того, чтобы поэтапный отказ от блока компиляции/модуля/библиотеки вместо предупреждения? Является ли запуск компиляции подзаголовком (достаточно хорошая система сборки)?
Мы хотим начать использовать -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
Я знаю, что лучше всего исправить эти предупреждения, но это гораздо проще сказать, чем сделать. Чтобы это изменение было успешным, мы должны сделать это поэтапно и не можем делать слишком много изменений сразу.
Любые предложения? Спасибо.
Как насчет того, чтобы поэтапный отказ от блока компиляции/модуля/библиотеки вместо предупреждения? Является ли запуск компиляции подзаголовком (достаточно хорошая система сборки)?
Это может быть глупость, но...
Почему не простой grep?
что-то вроде
gcc teste.c 2>&1 | grep -v 'comparison of distinct' | grep -v 'some_other_string'
Вероятно, вы хотите скрыть эти greps в script и вызвать script из вашего файла makefile вместо gcc
Согласно https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43245, это будет "-Wdiscarded-qualifiers", но поскольку запись с исправлением ошибок с 1 мая 2014 года, используемый вами компилятор gcc может не поддерживать его.