Как мне использовать C ++ 11 с g ++?

21

В настоящее время я печатаю весь свой код в gedit и использую терминал для компиляции своих программ. Для этого я набираю:

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

И это работает. Тем не менее, он не использует C ++ 11. Как я могу проверить свою версию C ++, а также скомпилировать через терминал, используя C ++ 11?

Мур
источник
1
также в сети stackoverflow.com/questions/10363646/compiling-c11-with-g
Джефф Пукетт
Нужно ли всегда включать -std = c ++ 11 или есть параметр, чтобы каждый раз, когда я компилировал его, автоматически заканчивался иск c ++ 11 или
French Mike

Ответы:

53

Это вы можете сделать с помощью -std=c++11флага. Вот пример:

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

Этот режим можно выбрать с помощью -std=c++11флага командной строки или -std=gnu++11для включения расширений GNU. ( Источник )

Смотрите объяснение других флагов ниже. Я глубоко верю, что использование хотя бы этих флагов ошибок в долгосрочной перспективе облегчит вашу жизнь. Как только вы лучше узнаете, что делает ваш скрипт, вы можете опустить предупреждения, если это необходимо для достижения результата, но это не должно быть стандартом. Надеюсь, это поможет вам. Вот хорошее место, чтобы начать читать.

  • -Wall - включает все основные предупреждения.
  • -Wextra - включает другие важные предупреждения.
  • -Werror- превратить все предупреждения в ошибки, что приведет к сбою компиляции, если появятся какие-либо предупреждения.

Источники:

  1. GCC: Сводка опций
  2. GCC: варианты запроса или подавления предупреждений
Videonauth
источник
5
Благодарность! Не могли бы вы объяснить, для каких целей «-Wall» и «-Werror» служат в этой команде, пожалуйста?
1
Добавил это в мой ответ.
Видеонавт
7
@ dhaneku.b: Почему бы не прочитать документацию? Вот для чего это.
Легкость гонок с Моникой
9
@LightnessRacesinOrbit Поскольку документация не обязательно объясняет, почему Видеонавт считал важным добавить их, несмотря на то, что они не были в исходном примере командной строки, или обязательно объясняет, какого рода важные взаимодействия "-Wall" и " -Werror "может иметь с" -std = c ++ 11 ". (Да, ответ на последний вопрос в этом «ничего особенного», но в документации об этом не сказано, и есть множество странных угловых случаев, которые не упомянуты в документации. «Отсутствие доказательств т доказательство отсутствия ", и все такое.)
RM
2
Этот режим можно выбрать с помощью -std=c++11флага командной строки или -std=gnu++11для включения расширений GNU. ( Источник )
Videonauth