Was sind die Unterschiede zwischen -std=c++11
und -std=gnu++11
als Kompilierungsparameter für gcc und clang? Gleiche Frage mit c99
und gnu99
? Ich kenne C ++ - und C-Standards, es sind die Unterschiede in den Parametern, die mich interessieren.
Ich habe irgendwo gelesen, dass es mit einigen Erweiterungen zu tun hat, aber mir ist nicht klar, welche und wie ich für ein neues Projekt zwischen der einen oder der anderen wählen soll.
gnu
diejenigen Erweiterungen beziehen, und wenn Sie portablen Code schreiben möchten , sollten Sie zu einem Standard und vermeiden Erweiterungen zusammen bleiben.Antworten:
Wie Sie selbst herausgefunden haben, besteht der Unterschied zwischen den beiden Optionen darin, ob GNU-Erweiterungen, die den C ++ - Standard verletzen / erweitern, aktiviert sind oder nicht. Die GNU C ++ - Erweiterungen werden hier beschrieben . Sie können auch die meisten GNU C-Erweiterungen ( hier beschrieben ) in Ihren C ++ - Programmen verwenden. Es wäre auch sinnvoll sein , um die zu lesen
-Wpedantic
GCC Option hier .Beachten Sie, dass einige Erweiterungen bei der Verwendung weiterhin wirksam sein können
-std=c++11
, solange sie nicht dem Standard widersprechen. Wenn ich zum Beispiel den MinGW-Compiler verwende, brauche ich die Erweiterungen für eine ArbeitBoost.Lexical_Cast
. Solange Sie jedoch keine verwenden, sollten Sie sich für maximale Portabilität besser an den Standard ohne Erweiterungen halten. Dies kann nützlich sein, wenn Sie gezwungen sind, den Compiler zu wechseln.quelle
gnu11
aber nicht aktiviert sindc++11
? Die Liste, mit der Sie verknüpft sind, enthält alle Erweiterungen, und wie Sie selbst angeben, sind einige von ihnen auch mitc++11
(wie__restrict__
) aktiviert .