Wie verwende ich C ++ 11 mit g ++?

21

Ich tippe momentan meinen gesamten Code in gedit ein und benutze das Terminal, um meine Programme zu kompilieren. Dazu schreibe ich:

$ g++ main.cpp -o main
$ ./main

Und das funktioniert. Es wird jedoch nicht C ++ 11 verwendet. Wie kann ich meine Version von C ++ überprüfen und mit C ++ 11 auch über das Terminal kompilieren?

muru
quelle
Müssen Sie immer -std = c ++ 11 einschließen oder gibt es eine Einstellung, damit sie bei jedem Kompilieren automatisch mit c ++ 11 übereinstimmt?
French Mike

Antworten:

53

Dies können Sie mit der -std=c++11Flagge tun . Hier ist ein Beispiel:

g++ -std=c++11 -Wall -Wextra -Werror main.cpp -o main

Dieser Modus kann mit dem -std=c++11Kommandozeilen-Flag oder auch -std=gnu++11zum Aktivieren von GNU-Erweiterungen ausgewählt werden. ( Quelle )

Siehe die Erklärung der anderen Flags weiter unten. Ich bin der festen Überzeugung, dass die Verwendung dieser Fehlerflags Ihr Leben auf lange Sicht einfacher macht. Sobald Sie besser wissen, was Ihr Skript tut, können Sie Warnungen auslassen, wenn dies zur Erzielung eines Ergebnisses erforderlich ist, dies sollte jedoch nicht der Standard sein. Hoffe das hilft dir. Hier ist ein guter Ort , um mit dem Lesen zu beginnen.

  • -Wall - aktiviert alle wichtigen Warnungen.
  • -Wextra - aktiviert andere wichtige Warnungen.
  • -Werror- Verwandeln Sie alle Warnungen in Fehler, sodass die Kompilierung fehlschlägt, wenn Warnungen gemeldet werden.

Quellen:

  1. GCC: Optionsübersicht
  2. GCC: Optionen zum Anfordern oder Unterdrücken von Warnungen
Videonauth
quelle
5
Vielen Dank! Haben Sie etwas dagegen zu erklären, welchen Zweck "-Wall" und "-Werror" in diesem Befehl bitte dienen?
1
Fügte es meiner Antwort hinzu.
Videonauth
7
@ dhaneku.b: Warum nicht die Dokumentation lesen? Dafür ist es da.
Leichtigkeit Rennen mit Monica
9
@LightnessRacesinOrbit Da die Dokumentation nicht unbedingt erklären muss, warum Videonauth es für wichtig hielt, sie hinzuzufügen, obwohl sie sich nicht in der ursprünglichen Beispielbefehlszeile befanden, oder unbedingt erklären muss, welche Art von wichtiger Interaktion "-Wall" und " -Werror "könnte mit" -std = c ++ 11 "haben. (Ja, die Antwort auf letztere lautet "nichts Besonderes", aber die Dokumentation wird das nicht sagen, und es gibt eine Reihe seltsamer Eckfälle, die in der Dokumentation nicht erwähnt werden. "Es gibt keine Beweise." t Beweis der Abwesenheit ", und das alles.)
RM
2
Dieser Modus kann mit dem -std=c++11Kommandozeilen-Flag oder auch -std=gnu++11zum Aktivieren von GNU-Erweiterungen ausgewählt werden. ( Quelle )
Videonauth