Jak używać C ++ 11 z g ++?

21

Obecnie piszę cały mój kod w gedit i używam terminala do kompilacji moich programów. Aby to zrobić, piszę:

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

I to działa. Jednak nie używa C ++ 11. Jak mogę sprawdzić moją wersję C ++, a także skompilować przez terminal przy użyciu C ++ 11?

muru
źródło
Czy musisz zawsze dołączać -std = c ++ 11, czy też jest takie ustawienie, że za każdym razem, gdy kompiluję, automatycznie dostosowuje się do pozwu c ++ 11 lub
francuski Mike

Odpowiedzi:

53

Można to zrobić za pomocą -std=c++11flagi. Oto przykład:

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

Ten tryb można wybrać za pomocą -std=c++11flagi wiersza polecenia lub w -std=gnu++11celu włączenia rozszerzeń GNU. ( Źródło )

Zobacz wyjaśnienie innych flag poniżej. Głęboko wierzę, że użycie przynajmniej tych flag błędów ułatwi ci życie na dłuższą metę. Po uzyskaniu lepszej wiedzy na temat działania skryptu można w razie potrzeby pominąć ostrzeżenia, aby osiągnąć wynik, ale nie powinien to być standard. Mam nadzieję, że to ci pomoże. Oto dobre miejsce, aby zacząć czytać.

  • -Wall - włącza wszystkie główne ostrzeżenia.
  • -Wextra - włącza inne ważne ostrzeżenia.
  • -Werror- przekształcić wszystkie ostrzeżenia w błędy, powodując niepowodzenie kompilacji, jeśli zostaną zgłoszone jakiekolwiek ostrzeżenia.

Źródła:

  1. GCC: Podsumowanie opcji
  2. GCC: opcje żądania lub wyłączenia ostrzeżeń
Videonauth
źródło
5
Dzięki! Czy mógłbyś wyjaśnić, jaki cel „-Wall” i „-Werror” służą w tym poleceniu?
1
Dodałem to do mojej odpowiedzi.
Videonauth
7
@ dhaneku.b: Dlaczego nie przeczytać dokumentacji? Po to jest.
Lekkość ściga się z Moniką
9
@LightnessRacesinOrbit Ponieważ dokumentacja niekoniecznie wyjaśni, dlaczego Videonauth uznała, że ​​ważne jest, aby je dodać, mimo że nie były one w pierwotnym przykładowym wierszu poleceń, lub koniecznie wyjaśnić, jaki rodzaj ważnej interakcji „-Wall” i „ -Werror ”może mieć z„ -std = c ++ 11 ”. (Tak, odpowiedź na to drugie pytanie brzmi: „nic specjalnego”, ale dokumentacja tego nie powie, a jest kilka dziwnych narożnych przypadków, które nie zostały wymienione w dokumentacji. „Brak dowodu nie jest” t dowód nieobecności ”i tak dalej.)
RM
2
Ten tryb można wybrać za pomocą -std=c++11flagi wiersza polecenia lub -std=gnu++11włączyć również rozszerzenia GNU. ( Źródło )
Videonauth