Como uso o C ++ 11 com g ++?

21

Atualmente, estou digitando todo o meu código no gedit e usando o terminal para compilar meus programas. Para fazer isso, estou digitando:

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

E isso está funcionando. No entanto, ele não está usando C ++ 11. Como posso verificar minha versão do C ++ e também compilar via terminal usando o C ++ 11?

muru
fonte
1
também na rede stackoverflow.com/questions/10363646/compiling-c11-with-g #
9788 Jeff Puckett 17/16
Você tem que sempre incluem -std = c ++ 11 ou há uma configuração para que toda vez que eu compilá-lo complie automaticamente processando c ++ 11 ou
Francês Mike

Respostas:

53

Isso você pode fazer usando a -std=c++11bandeira. Aqui está um exemplo:

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

Este modo pode ser selecionado com o -std=c++11sinalizador da linha de comando ou -std=gnu++11para ativar também as extensões GNU. ( Fonte )

Veja a explicação das outras bandeiras abaixo. Acredito profundamente que usar pelo menos essas sinalizações de erro facilitará sua vida a longo prazo. Depois de conhecer melhor o que seu script faz, você pode omitir avisos, se necessário, para obter um resultado, mas esse não deve ser o padrão. Espero que isso ajude você. Aqui está um bom lugar para começar a ler.

  • -Wall - ativa todos os principais avisos.
  • -Wextra - ativa outros avisos importantes.
  • -Werror- transformar todos os avisos em erros, causando falhas nas compilações se algum aviso for relatado.

Fontes:

  1. GCC: Resumo da Opção
  2. GCC: Opções para solicitar ou suprimir avisos
Videonauth
fonte
5
Obrigado! Você se importa em explicar que propósito "-Wall" e "-Werror" servem nesse comando, por favor?
1
Adicionado à minha resposta.
Videonauth
7
@ dhaneku.b: Por que não ler a documentação? É para isso que serve.
Lightness Races com Monica
9
@LightnessRacesinOrbit Como a documentação não necessariamente explica por que a Videonauth considerou importante adicioná-los, apesar de eles não estarem no exemplo de linha de comando original ou necessariamente explica que tipo de interação importante "-Wall" e " -Werror "pode ​​ter com" -std = c ++ 11 ". (Sim, a resposta para isso é "nada de especial", mas a documentação não diz isso, e há vários casos de canto estranhos que não são mencionados na documentação. "Ausência de prova não é ' t prova de ausência ", e tudo isso.)
RM
2
Este modo pode ser seleccionado com a -std=c++11bandeira de linha de comando, ou -std=gnu++11para permitir que extensões GNU bem como (. Fonte )
Videonauth