Мы хотим начать использовать -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
Я знаю, что лучше всего исправить эти предупреждения, но это гораздо проще сказать, чем сделать. Чтобы это изменение было успешным, мы должны сделать это поэтапно и не можем делать слишком много изменений сразу.
Любые предложения? Спасибо.