Ich lerne C ++ und verwende g ++ unter Linux zum Üben.
Ich möchte wissen, ob Leute, die als Programmierer arbeiten, das g ++ -pedantische Flag verwenden und auch seine Bedeutung in der realen Welt.
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ß.
Antworten:
Ja, mach das unbedingt. Tatsächlich müssen Sie die Handbuchseite lesen und mehr Warnungen aktivieren, als
-pedantic
und-Wall
tun werden.Nein, es gibt keinen Standard. MSVC verwendet
/W4
zum Beispiel.quelle
-Wall -Wextra -Werror -pedantic -std=c++0x
:)-pedantic
von C ++ eingestellt, da das Handbuch von GCC impliziert, dass es nur für C gedacht ist, und ich bin zur Verwendung-std=c++14
in neuen Projekten übergegangen .-Wall -Wextra -Werror -std=c++14
:)-Werror
macht alle Warnungen zu Fehlern. Aber-pedantic-errors
macht nur Fehler ausStandard ICO C++
Verstößen.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.
quelle
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).
quelle
-Wunreachable-code -Wno-long-long
-g -pg -fprofile-arcs -ftest-coverage
-g -O0
-O3
Es ist sehr wichtig, die
-pedantic
Flagge zu benutzen .Ich möchte nur hinzufügen, dass es mit dem aktuellen Standard ratsam ist, etwas Ähnliches zu verwenden wie:
Wo:
-std=c++17
Sagt 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:-Wextra
weist es an, noch einige Warnungen zu aktivieren, aber noch nicht alle.-Werror
weist es an, alle Warnungen in Fehler umzuwandeln.-Wpedantic
oder-pedantic
sagt es einfach :-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 .
quelle