Closed Mazdaywik closed 4 years ago
Если была опция -Werror в каком бы то ни было виде, выдаётся об этом дополнительное сообщение *** warnings being treated as errors.
Судя по поведению GCC, данное сообщение выводится только если указанное предупреждение-ошибка было обнаружено в коде:
root@DESKTOP-2ANIPDQ:~/test# gcc main.c -o main
main.c: In function ‘main’:
main.c:2:12: warning: overflow in implicit constant conversion [-Woverflow]
char kek = 2000000;
^~~~~~~
root@DESKTOP-2ANIPDQ:~/test# gcc main.c -Werror=unused-variable -o main
main.c: In function ‘main’:
main.c:2:12: warning: overflow in implicit constant conversion [-Woverflow]
char kek = 2000000;
^~~~~~~
main.c:2:6: error: unused variable ‘kek’ [-Werror=unused-variable]
char kek = 2000000;
^~~
cc1: some warnings being treated as errors
root@DESKTOP-2ANIPDQ:~/test# gcc main.c -Werror=comment -o main
main.c: In function ‘main’:
main.c:2:12: warning: overflow in implicit constant conversion [-Woverflow]
char kek = 2000000;
^~~~~~~
GCC также может принимать опцию -Wno-error и all в качестве параметра (т.е. -Wno-error=all)
root@DESKTOP-2ANIPDQ:~/test# gcc main.c -Wall -o main
main.c: In function ‘main’:
main.c:2:12: warning: overflow in implicit constant conversion [-Woverflow]
char kek = 2000000;
^~~~~~~
main.c:2:6: warning: unused variable ‘kek’ [-Wunused-variable]
char kek = 2000000;
^~~
root@DESKTOP-2ANIPDQ:~/test# gcc main.c -Werror -o main
main.c: In function ‘main’:
main.c:2:12: error: overflow in implicit constant conversion [-Werror=overflow]
char kek = 2000000;
^~~~~~~
cc1: all warnings being treated as errors
root@DESKTOP-2ANIPDQ:~/test# gcc main.c -Werror -Wno-error=overflow -o main
main.c: In function ‘main’:
main.c:2:12: warning: overflow in implicit constant conversion [-Woverflow]
char kek = 2000000;
^~~~~~~
root@DESKTOP-2ANIPDQ:~/test# gcc main.c -Werror -Wno-error=all -o main
main.c: In function ‘main’:
main.c:2:12: error: overflow in implicit constant conversion [-Werror=overflow]
char kek = 2000000;
^~~~~~~
cc1: all warnings being treated as errors
имеющую, как кажется, не совсем очевидное поведение:
root@DESKTOP-2ANIPDQ:~/test# gcc main.c -Werror=all -Wno-error=all -o main
main.c: In function ‘main’:
main.c:2:12: warning: overflow in implicit constant conversion [-Woverflow]
char kek = 2000000;
^~~~~~~
main.c:2:6: error: unused variable ‘kek’ [-Werror=unused-variable]
char kek = 2000000;
^~~
cc1: some warnings being treated as errors
Вопрос в том, насколько близко надо приблизиться к логике GCC?
Да, последний листинг совсем не очевиден 😀.
Про то, что есть симметрия -Werror
и -Wno-error
, не знал. Но с другой стороны логично — удовлетворяет принципу наименьшего удивления (программа должна работать так, чтобы вызывать наименьшее удивление у пользователя).
Буду ли я делать у себя -Wno-error
, не знаю. По настроению.
Все равно было делать нечего :)
0a88ed92
1) Конструкция -W[no-]error[=...]
. Параметр all
не добавлял;
2) Для предупреждений в квадратных скобках указываются их имена в виде опций командной строки;
3) Выдаются сообщения вида ***.ref: some/all warnings being treated as errors
;
4) Если был указано -Werror=<флаг>
и обнаружено предупреждение этого типа, то при печати (как в GCC) будет выведено ERROR
, а не WARNING
;
5) Конструкции вида -Werror=<флаг>
неявно включают -W<флаг>
(тоже как в GCC); наоборот, -Wno-error=<флаг>
не исполняет -Wno-<флаг>
.
Пример:
D:\refal-5-lambda\build>..\bin\rlc.bat -Wall -Werror=nul-in-compound hello.ref
*Compiling hello.ref:
hello.ref:5:1: WARNING: Function FINAL should not be declared $ENTRY [-Winit-final-entry]
hello.ref:10:14: ERROR: Zero byte in compound symbol [-Werror=nul-in-compound]
hello.ref: some warnings being treated as errors
Комментарии (преимущественно по стилю) я написал на странице коммита: https://github.com/bmstu-iu9/refal-5-lambda/commit/0a88ed9292f34165d69cc38b823f6b531566c6d7.
StrFromPos {
NoPos = ' ';
(FileLine s.LineNumber e.FileName) = e.FileName ':' <Symb s.LineNumber>;
(FileRowCol (s.Row s.Col) e.FileName) = e.FileName ':' <Symb s.Row> ':' <Symb s.Col>;
}
Исправил 48c7bf90
Сплющивайте оба коммита, добавляйте к ним номер #281 и делайте pull request.
Поведение GCC, которое мы рассматриваем как образец:
warnings.c
```C++ int f(int x) { char y = 65536; return x + y; } ```Нужно приблизить поведение, реализованное в #273, к поведению GCC.
-Werror
может получать параметр — конкретное предупреждение, которое надо считать ошибкой.-Werror
в каком бы то ни было виде, выдаётся об этом дополнительное сообщение*** warnings being treated as errors
.@nexterot, обращаю внимание — задача назначена мне и она вне вехи study spring 2020.