Empfohlene gcc-Warnoptionen für C [closed]

Lesezeit: 4 Minuten

Benutzeravatar von Sard
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

Benutzeravatar von pmg
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 -Wallzumindest 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=, also könnte man wirklich einfach sagen -std=c99 -pedantic und genau den gleichen Effekt erzielen. Ich neige dazu, es sowieso zu verwenden, nur für den Dokumentationseffekt. Ich habe das Gefühl, dass es lautet: “Dieser Code ist ANSI-Standard (pedantisch!) und verwendet Standard-C99.” Unmittelbar danach kommt normalerweise -Wno-long-long oder ähnliches … irgendwelche Ausnahmen vom ANSI-Standard.

    – 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

Benutzeravatar von Nils Pipenbrinck
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

Benutzeravatar von Evan Teran
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

1419500cookie-checkEmpfohlene gcc-Warnoptionen für C [closed]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy