Ob man -pedantic flag in g ++ benutzt oder nicht?

16

Ich lerne C ++ und verwende g ++ unter Linux zum Üben.

  1. Ich möchte wissen, ob Leute, die als Programmierer arbeiten, das g ++ -pedantische Flag verwenden und auch seine Bedeutung in der realen Welt.

  2. Was ist mit anderen Compilern, erlauben sie das auch? Ist dies ein De-facto-Standard geworden?

Ich bin daran interessiert, weil ich C ++ Primer lese, in dem der Autor darauf hinweist, dass es illegal ist, einen Nicht-Konstanten-Ausdruck als Dimension in der Array-Definition zu verwenden, und g ++ dies standardmäßig zulässt. Und es könnte andere Dinge geben, von denen ich nichts weiß.

user803563
quelle

Antworten:

21

Ja, mach das unbedingt. Tatsächlich müssen Sie die Handbuchseite lesen und mehr Warnungen aktivieren, als -pedanticund -Walltun werden.

Nein, es gibt keinen Standard. MSVC verwendet /W4zum Beispiel.

Edward Strange
quelle
7
+1, das tue ich normalerweise -Wall -Wextra -Werror -pedantic -std=c++0x:)
greyfade
4
@JaredBurrows: Tatsächlich habe ich die Verwendung -pedanticvon C ++ eingestellt, da das Handbuch von GCC impliziert, dass es nur für C gedacht ist, und ich bin zur Verwendung -std=c++14in neuen Projekten übergegangen .
greyfade
1
@greyfade Ah, ich hätte sagen sollen, -Wall -Wextra -Werror -std=c++14:)
Jared Burrows
1
Ich habe gerade -pedantische-Fehler entdeckt, die Fehler und keine Warnungen enthalten.
Galik
6
@VillasV Well -Werrormacht alle Warnungen zu Fehlern. Aber -pedantic-errorsmacht nur Fehler aus Standard ICO C++Verstößen.
Galik
10

Obwohl ich C ++ seit einiger Zeit nicht mehr programmiert habe, rate ich Ihnen, dieses Flag zu verwenden. Es hilft Ihnen bei der Erstellung von normenkonformem Code und erleichtert das Leben aller. AFAIK, die meisten anderen Compiler unterstützen die gcc / g ++ - Erweiterungen nicht.

Ich hasse es zum Beispiel, wenn ich keinen Code kompilieren kann, nur weil der ursprüngliche Entwickler beschlossen hat, gegen nicht standardmäßige Compiler-Erweiterungen zu programmieren.

Ich wette, dass eine riesige Menge (sagen wir 20%) von Linux-Programmen, die in C / C ++ geschrieben wurden, nur mit gcc / g ++ kompiliert werden kann, was mich irgendwie traurig macht. Halten Sie sich immer an die Normen.

Falke
quelle
2
Als ich das letzte Mal versuchte, andere Compiler zu verwenden, würde ich sagen, dass es eher 20% waren, die mit anderen Compilern funktionieren würden , und 80% hingen von gcc-Erweiterungen ab.
Jerry Coffin
6

Persönlich benutze ich:

-Wall -Wextra -Wshadow -Weffc ++ -Wstrict-Aliasing -ansi -pedantic -Fehler

Dadurch wird eine Vielzahl von Warnungen aktiviert, aber vor allem werden alle Warnungen als Fehler behandelt (da die meisten Warnungen logische Fehler in Ihrem Denken sind).

Martin York
quelle
Würden Sie dieser Liste 2019 etwas hinzufügen?
Ayxan
1
@ Ayxan Das ist das Minimum, das ich jedem empfehlen kann. Aber es gibt noch eine Menge mehr, die nützlich sind. Sie müssen jedoch die Dokumentation überprüfen und prüfen, ob sie für Sie nützlich ist. Schauen Sie sich-Wunreachable-code -Wno-long-long
Martin York
1
@ Ayxan Beim Erstellen von Profilcode:-g -pg -fprofile-arcs -ftest-coverage
Martin York
1
@ Ayxan Beim Erstellen von Debug-g -O0
Martin York
1
@ Ayxan Beim Erstellen von Produktionscode-O3
Martin York
1

Es ist sehr wichtig, die -pedanticFlagge zu benutzen .

Ich möchte nur hinzufügen, dass es mit dem aktuellen Standard ratsam ist, etwas Ähnliches zu verwenden wie:

-std=c++17 -Wall -Wextra -Werror -Wpedantic -pedantic-errors

Wo:

  • -std=c++17Sagt es, sich an die 2017 veröffentlichte Überarbeitung des C ++ - Standards zu halten, können Sie hier mehr darüber lesen .

  • -Wall sagt es zu:

    Aktivieren Sie alle Warnungen zu Konstruktionen, die einige Benutzer als bedenklich erachten und die leicht zu vermeiden (oder zu ändern sind, um die Warnung zu verhindern) sind, auch in Verbindung mit Makros, mit anderen Worten, einige Warnungen.

  • -Wextra weist es an, noch einige Warnungen zu aktivieren, aber noch nicht alle.

  • -Werror weist es an, alle Warnungen in Fehler umzuwandeln.

  • -Wpedanticoder -pedanticsagt es einfach :

    Geben Sie alle von ISO C und ISO C ++ geforderten Warnungen aus. lehnen Sie alle Programme ab, die verbotene Erweiterungen verwenden, und einige andere Programme, die nicht ISO C und ISO C ++ folgen.

  • -pedantic-errors weist es an, einen Fehler zu melden, wenn der Basisstandard (siehe -Wpedantic) eine Diagnose erfordert.


Dieses Set ist normalerweise nicht nur für Anfänger nützlich, da sie nach und nach feststellen, dass jede Warnung möglicherweise zu Fehlern führt, sondern auch für den normalen Gebrauch.

Alle Warnoptionen werden hier auf der GNU / GCC-Seite ausführlich beschrieben .

LinuxSecurityFreak
quelle