Ich versuche, meinen C++ - Compiler auf C++ 11 zu aktualisieren. Ich habe ein bisschen gesucht und bin zu dem Schluss gekommen, dass ich das Flag -std=c++0x
oder -std=gnu++0x
verwenden muss, aber ich weiß nicht viel über Flaggen. Kann mir jemand helfen? (Ich benutze Ubuntu 12.04.)
Hier ist der Fehler, den ich vom Compiler erhalte, wenn ich versuche, eine Bibliothek zu verwenden, die in C++ 11 enthalten ist (d. H. Ein Array):
#include <array>
#include <iostream>
int main()
{
std::array<int, 3> arr = {2, 3, 5};
...
}
Diese Datei erfordert Compiler- und Bibliotheksunterstützung für den kommenden ISO C++ - Standard C++ 0x. Diese Unterstützung ist derzeit experimentell und muss mit den Compileroptionen -std = c ++ 0x oder -std = gnu ++ 0x aktiviert werden.
Flags (oder Compileroptionen) sind nichts anderes als normale Befehlszeilenargumente, die an die ausführbare Datei des Compilers übergeben werden.
Angenommen, Sie rufen g ++ über die Befehlszeile (Terminal) auf:
$ g++ -std=c++11 your_file.cpp -o your_program
oder
$ g++ -std=c++0x your_file.cpp -o your_program
wenn das oben nicht funktioniert.
Sie können Ihren g++
mit folgendem Befehl überprüfen:
which g++
g++ --version
auf diese Weise erfahren Sie, auf welchen Kompatibilitätspartner derzeit verwiesen wird.
Führen Sie Folgendes aus, um zu g++
4.7 zu wechseln (vorausgesetzt, Sie haben es auf Ihrem Computer installiert):
Sudo update-alternatives --config gcc
There are 2 choices for the alternative gcc (providing /usr/bin/gcc).
Selection Path Priority Status
------------------------------------------------------------
0 /usr/bin/gcc-4.6 60 auto mode
1 /usr/bin/gcc-4.6 60 manual mode
* 2 /usr/bin/gcc-4.7 40 manual mode
Wählen Sie dann 2
als Auswahl aus (Mein Gerät zeigt bereits auf g++
4.7, also das *).
Sobald Sie den Complier gewechselt haben, führen Sie erneut g++ --version
aus, um zu überprüfen, ob die Umschaltung korrekt erfolgt ist.
Jetzt kompilieren Sie Ihr Programm mit
g++ -std=c++11 your_file.cpp -o main
Ihr Ubuntu hat definitiv eine ausreichend aktuelle Version von g ++. Das zu verwendende Flag ist -std=c++0x
.
Wenn Sie die Compiler-Erweiterungen GNU beibehalten möchten, verwenden Sie -std = gnu ++ 0x anstelle von -std = c ++ 0x. Hier ist ein Zitat aus der Manpage:
Der Compiler kann verschiedene Basisstandards wie c89 oder c ++ 98 und GNU Dialekte dieser Standards wie gnu89 oder gnu ++ 98 akzeptieren. Durch die Angabe eines Basisstandards akzeptiert der Compiler alle Programme, die diesem Standard folgen, und solche, die GNU -Erweiterungen verwenden, die dem nicht widersprechen. Beispiel: -std = c89 deaktiviert bestimmte Funktionen von GCC, die mit ISO C90 nicht kompatibel sind, z. B. die Schlüsselwörter "asm" und "typeof", jedoch keine anderen GNU -Erweiterungen, in denen keine Bedeutung vorliegt ISO C90, z. B. das Weglassen des Mittelbegriffs eines "?:" - Ausdrucks. Wenn Sie dagegen einen GNU -Dialekt eines Standards angeben, werden alle Funktionen aktiviert, die der Compiler unterstützt, auch wenn diese Funktionen die Bedeutung des Basisstandards ändern und einige streng konforme Programme möglicherweise abgelehnt werden. Der spezielle Standard wird von -pedantic verwendet, um zu identifizieren, welche Funktionen GNU Erweiterungen bei dieser Version des Standards sind. Beispiel: -std = gnu89 -pedantic warnt vor // Kommentaren im C++ - Stil, -std = gnu99 -pedantic nicht.
Sie können sich auf den folgenden Link beziehen, für den Funktionen in einer bestimmten Version des Compilers unterstützt werden. Der Compiler enthält eine umfassende Liste der unterstützten Funktionen. Sieht so aus, als ob GCC dem Standard genau folgt und vor allen anderen Compilern implementiert.
Zu Ihrer Frage können Sie mit kompilieren
g++ -std=c++11
für C++ 11g++ -std=c++14
für C++ 14g++ -std=c++17
für C++ 17g++ -std=c++2a
für C++ 20, obwohl noch nicht alle Funktionen von C++ 20 unterstützt werden. Über diesen Link erhalten Sie Informationen zur Funktionsunterstützung in GCC .Die Liste ändert sich ziemlich schnell. Behalten Sie die Liste im Auge, wenn Sie darauf warten, dass bestimmte Funktionen unterstützt werden.