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).
-O3lub 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-equaldodany do mojego aliasu. Dziękuję Mark
-Wstrict-aliasing=2faktycznie obniża poziom ostrzeżenia -Wstrict-aliasing=3implikowanego przez -Wall, przynajmniej w najnowszej wersji gcc.
Lubię -Werror. Utrzymuje kod ostrzeżenia za darmo.
#warningsię dobrego efektu ubocznego stosowania -Werror.
-Werrordomyś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, -Weverythinga 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.