¿Cómo uso C ++ 11 con g ++?

21

Actualmente estoy escribiendo todo mi código en gedit y estoy usando el terminal para compilar mis programas. Para hacerlo, estoy escribiendo:

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

Y esto está funcionando. Sin embargo, no está usando C ++ 11. ¿Cómo puedo verificar mi versión de C ++ y también compilar a través de terminal usando C ++ 11?

muru
fuente
¿Tiene que incluir siempre -std = c ++ 11 o hay una configuración para que cada vez que lo compile compile automáticamente demandando c ++ 11 o
Francés Mike

Respuestas:

53

Esto puede hacerlo utilizando la -std=c++11bandera. Aquí hay un ejemplo:

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

Este modo se puede seleccionar con el -std=c++11indicador de línea de comando, o también -std=gnu++11para habilitar extensiones GNU. ( Fuente )

Vea la explicación de las otras banderas a continuación. Creo profundamente que usar al menos esos indicadores de error hará que su vida sea más fácil a largo plazo. Una vez que tenga un mejor conocimiento de lo que hace su script, puede omitir advertencias si es necesario para lograr un resultado, pero no debería ser el estándar. Espero que esto te ayude. Aquí hay un buen lugar para comenzar a leer.

  • -Wall - habilita todas las advertencias principales.
  • -Wextra - habilita otras advertencias importantes.
  • -Werror- convierta todas las advertencias en errores, haciendo que las compilaciones fallen si se informa alguna advertencia.

Fuentes:

  1. CCG: Resumen de opciones
  2. CCG: opciones para solicitar o suprimir advertencias
Videonauth
fuente
55
¡Gracias! ¿Te importaría explicar para qué sirven "-Wall" y "-Werror" en ese comando, por favor?
1
Lo agregué a mi respuesta.
Videonauth
77
@ dhaneku.b: ¿Por qué no leer la documentación? Para eso está ahí.
Lightness compite con Monica
99
@LightnessRacesinOrbit Debido a que la documentación no necesariamente va a explicar por qué Videonauth pensó que era importante agregarlos, a pesar de que no estaban en la línea de comandos de ejemplo original, o necesariamente explicar qué tipo de interacción importante "-Wall" y " -Werror "podría tener con" -std = c ++ 11 ". (Sí, la respuesta a esto último en esto es "nada especial", pero la documentación no va a decir eso, y hay un montón de casos extraños que no se mencionan en la documentación. "La ausencia de prueba no es t prueba de ausencia ", y todo eso.)
RM
2
Este modo se puede seleccionar con el -std=c++11indicador de línea de comando, o también -std=gnu++11para habilitar extensiones GNU. ( Fuente )
Videonauth