Abgesehen von -Wall, welche anderen Warnungen fanden die Leute nützlich?
http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Warning-Options.html
Sard
Abgesehen von -Wall, welche anderen Warnungen fanden die Leute nützlich?
http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Warning-Options.html
Ich verwende regelmäßig:
gcc -m64 -std=c99 -pedantic -Wall -Wshadow -Wpointer-arith -Wcast-qual \
-Wstrict-prototypes -Wmissing-prototypes
Dieses Set fängt viel für Leute ein, die es nicht gewohnt sind (Leute, deren Code ich zum ersten Mal mit diesen Flags kompilieren kann); es gibt mir selten ein Problem (obwohl -Wcast-qual gelegentlich ein Ärgernis ist).
Heutzutage muss ich hinzufügen ‘-Wdeclaration-after-statement
‘, um Code zu erkennen, den MSVC (der im Grunde immer noch ein C89-Compiler ist) nicht verarbeiten kann. Es ist ein Ärgernis. Hinzufügen von ‘-Wextra
“ kann auch einige andere Probleme erkennen.
– Jonathan Leffler
6. Juli 2010 um 14:00 Uhr
Außerdem ist es eine gute Idee, hinzuzufügen -O3
oder etwas ähnliches; Es gibt Warnungen, die nur generiert werden, wenn der Code optimiert wird.
– Jonathan Leffler
5. März 2012 um 6:26 Uhr
Laut gcc doc ist -O2 am besten geeignet, um Warnungen zu erkennen. Ich bin mir nicht sicher, ob -O3 -O2 impliziert oder ob weitere Warnungen generiert werden können.
– Firmmo
21. August 2012 um 12:55 Uhr
Überspringen Sie -m64, wenn Sie sich nicht in einer 64-Bit-Umgebung befinden.
– Tor Klingeberg
5. Februar 2013 um 20:21 Uhr
Beides verwenden -m32
und -m64
(natürlich in separaten Läufen) bietet einen besseren Schutz vor verschiedenen Fehlern in der Art und Weise, wie Sie es verwenden printf()
und scaf()
Konvertierungsspezifikationen.
– Jonathan Leffler
17. Oktober 2014 um 11:56 Uhr
pmg
Stand 01.09.2011, mit gcc-Version 4.6.1
Mein aktueller “Entwicklungs”-Alias
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 \ -Wold-style-definition -Werror \ -ggdb3 \ -O0 \ -fno-omit-frame-pointer -ffloat-store -fno-common -fstrict-aliasing \ -lm
Der Alias ”release”.
gcc -std=c89 -pedantic -O3 -DNDEBUG -flto -lm
Stand 03.11.2009
Pseudonym „Entwicklung“.
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
Pseudonym “freigeben”.
gcc -lm -std=c89 -pedantic -O3 -DNDEBUG --combine -fwhole-program -funroll-loops
-Wfloat-equal
meinem Alias hinzugefügt. Danke Markus
– pmg
3. November 2009 um 12:51 Uhr
Beachten Sie, dass -Wstrict-aliasing=2
tatsächlich senkt die Warnstufe von -Wstrict-aliasing=3
behauptet von -Wall
zumindest mit einer neueren Version von gcc.
– nwellnhof
31. Januar 2015 um 14:20 Uhr
@nwellnhof das ist der springende Punkt bei benutzerdefinierten Warneinstellungen, sie verrotten mit der Zeit …
– jugr
8. Januar um 13:48 Uhr
Ich habe mit C++ angefangen, und als ich zum Lernen von CI gewechselt bin, habe ich darauf geachtet, extra-anal zu sein:
-fmessage-length=0 -ansi -pedantic -std=c99 -Werror -Wall -Wextra -Wwrite-strings -Winit-self -Wcast-align -Wcast-qual -Wpointer-arith -Wstrict-aliasing -Wformat=2 -Wmissing-declarations -Wmissing-include-dirs -Wno-unused-parameter -Wuninitialized -Wold-style-definition -Wstrict-prototypes -Wmissing-prototypes
Können Sie gleichzeitig -ansi -pedantic -std=c99 verwenden? Ist -ansi nicht ungefähr dasselbe wie c89? und wenn ja wie funktioniert das mit dem c99 flag?
– Johann
26. Oktober 2009 um 5:13 Uhr
@Johan – Sie können, und es ist eigentlich nicht notwendig, wie ich kürzlich herausgefunden habe. -ansi impliziert -std=
– Tom
27. Oktober 2009 um 2:27 Uhr
Vermisst du dich nicht -pedantic-errors
? Es ist nicht gleich -Werror=pedantic
.
– x-yuri
26. Juli 2021 um 17:00 Uhr
Wie in den Kommentaren zu anderen Antworten erwähnt, -Wstrict-aliasing
gehört jetzt dazu -Wall
.
– jugr
8. Januar um 13:48 Uhr
Ich mag -Werror. Hält die Codewarnung frei.
Holen Sie sich das Handbuch für die GCC-Version, die Sie verwenden, find alle Warnoptionen verfügbarund dann deaktivieren nur diejenigen, für die Sie eine haben zwingend Grund dazu. (Zum Beispiel nicht änderbare Header von Drittanbietern, die Ihnen sonst viele Warnungen geben würden.) Dokumentieren Sie diese Gründe. (Im Makefile oder wo auch immer Sie diese Optionen setzen.) Überprüfen Sie die Einstellungen in regelmäßigen Abständen, und wann immer Sie Ihren Compiler aktualisieren.
Der Compiler ist dein Freund. Warnungen sind dein Freund. Geben Sie dem Compiler so viel Gelegenheit wie möglich, Sie über potenzielle Probleme zu informieren.
FYI, das Handbuch enthält keine einzige umfassende Liste von Warnungen. Sie können jedoch solche Listen finden hierzusammen mit den Tools, die zu ihrer Generierung verwendet werden.
– Kyle Strand
28. Februar 2016 um 18:50 Uhr
Nils Pipenbrink
Ich benutze auch:
-Wstrict-overflow=5
Um diese fiesen Käfer zu fangen kann auftreten, wenn ich Code schreibe, der auf dem Überlaufverhalten von Ganzzahlen beruht.
Und:
-Wextra
Das ermöglicht einige Optionen, die auch schön zu haben sind. Die meisten sind jedoch für C++.
FYI, das Handbuch enthält keine einzige umfassende Liste von Warnungen. Sie können jedoch solche Listen finden hierzusammen mit den Tools, die zu ihrer Generierung verwendet werden.
– Kyle Strand
28. Februar 2016 um 18:50 Uhr
Evan Teran
Normalerweise kompiliere ich mit “-W -Wall -ansi -pedantic”, dies hilft, maximale Qualität und Portabilität des Codes sicherzustellen.
Nur eine Anmerkung -ansi überschreibt -std=c99
– Sarde
30. September 2008 um 19:45 Uhr
Entspricht -ansi nicht der Verwendung von -std=c89?
– Helfermethode
1. April 2010 um 16:47 Uhr