Inne niż - Jakie inne ostrzeżenia okazały się przydatne?
http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Warning-Options.html
Inne niż - Jakie inne ostrzeżenia okazały się przydatne?
http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Warning-Options.html
Odpowiedzi:
Rutynowo używam:
gcc -m64 -std=c99 -pedantic -Wall -Wshadow -Wpointer-arith -Wcast-qual \
-Wstrict-prototypes -Wmissing-prototypes
Ten zestaw przyciąga wiele osób, które nie są do niego przyzwyczajone (osoby, których kod mogę skompilować z tymi flagami po raz pierwszy); rzadko sprawia mi to problem (chociaż -Wcast-qual jest czasami uciążliwe).
-O3
lub coś podobnego; istnieją ostrzeżenia, które są generowane tylko wtedy, gdy kod jest zoptymalizowany.
-m32
i -m64
(oczywiście w oddzielnych przebiegach) zapewnia lepszą ochronę przed różnymi błędami w sposobie używania printf()
i scaf()
specyfikacjach konwersji.
Od 2011-09-01, z wersją gcc 4.6.1
Mój obecny alias „deweloperski”
gcc -std = c89 -pedantic -Wall \ -Wno-missing-braces -Wextra -Wno-missing-field-initializers -Wformat = 2 \ -Wswitch-default -Wswitch-enum -Wcast-align -Wpointer-arith \ -Wbad-function-cast -Wstrict-overflow = 5 -Wstrict-prototypes -Winline \ -Wundef -Wnested-externs -Wcast-qual -Wshadow -Wunreachable-code \ -Wlogical-op -Wfloat-equal -Wstrict-aliasing = 2 -Wredundant-decls \ -Definicja w stylu złota -Werror \ -ggdb3 \ -O0 \ -fno-omit-frame-pointer -ffloat-store -fno-common -fstrict-aliasing \ -lm
Alias „zwolnienia”
gcc -std = c89 -pedantic -O3 -DNDEBUG -flto -lm
Od 2009-11-03
alias „deweloperski”
gcc -Wall -Wextra -Wformat = 2 -Wswitch-default -Wcast-align -Wpointer-arith \ -Wbad-function-cast -Wstrict-prototypes -Winline -Wundef -Wnested-externs \ -Wcast-qual -Wshadow -Wwrite-strings -Wconversion -Wunreachable-code \ -Wstrict-aliasing = 2 -ffloat-store -fno-common -fstrict-aliasing \ -lm -std = c89 -pedantic -O0 -ggdb3 -pg --coverage
alias „release”
gcc -lm -std = c89 -pedantic -O3 -DNDEBUG --combine -fwhole-program -funroll-loops
-Wfloat-equal
dodany do mojego aliasu. Dziękuję Mark
-Wstrict-aliasing=2
faktycznie obniża poziom ostrzeżenia -Wstrict-aliasing=3
implikowanego przez -Wall
, przynajmniej w najnowszej wersji gcc.
Lubię -Werror. Utrzymuje kod ostrzeżenia za darmo.
#warning
się dobrego efektu ubocznego stosowania -Werror
.
-Werror
domyślnie w swoich kompilacjach, denerwuje to pakerów, którzy używają różnych wersji kompilatora od Ciebie, ponieważ ostrzeżenia zmieniają się wraz z wersją kompilatora, czasami kod, który jest ostrzegawczy, będzie dla Ciebie ostrzeżenie dla kogoś innego i następnie muszą zagłębić się w system kompilacji, aby go wyłączyć.
Zacząłem od C ++, więc kiedy przestawiłem się na naukę CI, upewniłem się, że jestem ekstra-analityczny:
-f długość-wiadomości = 0 -ansi -pedantic -std = c99 -Werror -Ściana -Wextra -Wpisać ciągi -Winit-self -Wcast-align -Wcast-qual -Wpointer-arith -Wcisłe aliasing -Wformat = 2 -Brak-deklaracji -Wmissing-include-dirs -Wno-nieużywany-parametr -Wuninitialized -Definicja w stylu złotym -Wstrict-prototypes -Brak-prototypów
Pobierz instrukcję dla używanej wersji GCC, znajdź wszystkie dostępne opcje ostrzeżeń , a następnie dezaktywuj tylko te, dla których masz do tego ważny powód. (Na przykład niemodyfikowalne nagłówki innych firm, które w przeciwnym razie dawałyby wiele ostrzeżeń). Udokumentuj te powody. (W Makefile lub gdziekolwiek ustawisz te opcje.) Przeglądaj ustawienia przy regularnych interwałach i za każdym razem, gdy aktualizujesz swój kompilator.
Kompilator to twój przyjaciel. Ostrzeżenia są twoim przyjacielem. Daj kompilatorowi jak największą szansę na poinformowanie Cię o potencjalnych problemach.
Używam również:
-Wstrict-overflow = 5
Aby wyłapać te okropne błędy, które mogą wystąpić, gdy napiszę kod, który opiera się na zachowaniu przepełnienia liczb całkowitych.
I:
-Wextra
Co daje pewne opcje, które są również przyjemne. Jednak większość z nich jest przeznaczona dla C ++.
Zwykle kompiluję z "-W -Wall -ansi -pedantic", co pomaga zapewnić maksymalną jakość i przenośność kodu.
-pedantic -Wall -Wextra -Wno-write-strings -Wno-unused-parameter
W trybie „Zranić mnie dużo” zostawiam -Wnie ...
Lubię, gdy mój kod jest wolny od ostrzeżeń, szczególnie w C ++. Podczas gdy ostrzeżenia kompilatora C często można zignorować, wiele ostrzeżeń C ++ pokazuje podstawowe defekty w kodzie źródłowym.
Foo(int dndu, int dndv) : dndu_(dndu), dndv_(dndu) {}
-> stosunkowo trudne do wykrycia. Jeśli denerwuje Cię to ostrzeżenie, powinieneś po prostu odkomentować parametr foo (int /*q*/)
, co również zwiększy czytelność twojego kodu.
-pedantyczne-błędy
clang
(kompilator C projektu LLVM), a następnie skompiluj z nim, -Weverything
a zobaczysz, jak przyjemna kompilacja może się stać (niektóre ostrzeżenia są całkowicie szalone, ale technicznie poprawne).
-Wfloat-equal, -Wshadow, -Wmissing-prototypes,
Obecnie używam:
-Wall -W -Wextra -Wconversion -Wshadow -Wcast-qual -Wwrite-strings -Werror
Listę tę zaczerpnąłem głównie z książki „Wprowadzenie do gcc”, a następnie z rekomendacji Ulricha Dreppera na temat programowania obronnego ( http://people.redhat.com/drepper/Defensive-slides.pdf ).
Ale nie mam żadnej nauki za moją listą, po prostu czułem się jak dobra lista.
/ Johan
Uwaga: nie lubię jednak tych pedantycznych flag ...
Uwaga: Myślę, że -W i -Wextra to mniej więcej to samo.
Generalnie po prostu używam
gcc -Wall -W -Wunused-parameter -Wmissing-declarations -Wstrict-prototypes -Wmissing-prototypes -Wsign-compare -Wconversion -Wshadow -Wcast-align -Wparentheses -Wsequence-point -Wdeclaration-after-statement -Wundef -Wpointer-arith -Wnested-externs -Wredundant-decls -Werror -Wdisabled-optimization -pedantic -funit-at-a-time -o
-Wfatal-errors
-Wdeclaration-after-statement
”, aby wykryć kod, którego MSVC (który nadal jest w zasadzie kompilatorem C89) nie będzie obsługiwać. To utrapienie. Dodanie „-Wextra
” może również wykryć inne problemy.