Ya sea para usar -pedantic flag en g ++ o no?

16

Estoy aprendiendo C ++ y estoy usando g ++ en Linux para practicar.

  1. Quiero saber si las personas que trabajan como programadores usan el indicador pedagógico g ++ y también su importancia en el mundo real.

  2. ¿Qué pasa con otros compiladores, también permiten esto? ¿Se ha convertido esto en un estándar de facto?

Estoy interesado porque estoy leyendo C ++ Primer donde el autor señala que es ilegal usar expresiones no constantes como dimensión en la definición de matriz y g ++ por defecto lo permite. Y puede haber otras cosas que desconozco.

usuario803563
fuente

Respuestas:

21

Sí, absolutamente haz esto. De hecho, es necesario estudiar la página del manual y encienda más advertencias que -pedanticy -Wallva a hacer.

No, no hay un estándar. MSVC utiliza, /W4por ejemplo.

Edward extraño
fuente
77
+1, generalmente lo hago -Wall -Wextra -Werror -pedantic -std=c++0x:)
greyfade
44
@JaredBurrows: En realidad, dejé de usar -pedanticC ++, ya que el manual de GCC implica que solo está destinado a C, y he pasado a usarlo -std=c++14en nuevos proyectos.
greyfade
1
@greyfade Ah, debería haber dicho, -Wall -Wextra -Werror -std=c++14:)
Jared Burrows
1
Acabo de descubrir -pedantic-errors que da errores, no advertencias.
Galik
66
@VillasV Well -Werrorconvierte todas las advertencias en errores. Pero -pedantic-errorssolo comete errores por Standard ICO C++infracciones.
Galik
10

Si bien no he programado C ++ durante bastante tiempo, le aconsejo que use esta bandera. Le ayuda a crear código compatible con los estándares y facilitará la vida de todos. AFAIK, la mayoría de los otros compiladores no son compatibles con las extensiones gcc / g ++.

Odio, por ejemplo, cuando no puedo compilar código solo porque el desarrollador original decidió codificar contra extensiones de compilador no estándar.

Apuesto a que una gran cantidad (digamos el 20%) de programas de Linux que se escribieron en C / C ++ no se compilará con nada más que gcc / g ++, lo que me pone un poco triste. Siempre adherirse a los estándares.

Halcón
fuente
2
La última vez que he intentado usar otros compiladores, yo diría que era más como 20% que sería trabajar con otros compiladores, y el 80% dependía de extensiones gcc.
Jerry Coffin
6

Personalmente uso:

-Wall -Wextra -Wshadow -Weffc ++ -Wstrict-aliasing -ansi -pedantic -Werror

Por lo tanto, activa una serie de advertencias, pero lo más importante es que trata todas las advertencias como errores (ya que la mayoría de las advertencias son errores lógicos en su pensamiento).

Martin York
fuente
¿Agregarías algo a esta lista en 2019?
Ayxan
1
@Ayxan Ese es el conjunto mínimo que recomiendo que todos usen. Pero hay muchos más que son útiles. Pero debe leer la documentación y ver si son útiles para usted. Echa un vistazo-Wunreachable-code -Wno-long-long
Martin York
1
@Ayxan Al construir el código de perfil:-g -pg -fprofile-arcs -ftest-coverage
Martin York
1
@Ayxan Al construir la depuración-g -O0
Martin York
1
@Ayxan Al construir el código de producción-O3
Martin York
1

Es muy esencial usar la -pedanticbandera.

Solo agregaría que con el estándar actual es aconsejable usar algo similar a:

-std=c++17 -Wall -Wextra -Werror -Wpedantic -pedantic-errors

Dónde:

  • -std=c++17le dice que se adhiera a la revisión del estándar C ++, publicado en 2017, puede leer más sobre esto aquí .

  • -Wall le dice que:

    Habilite todas las advertencias sobre construcciones que algunos usuarios consideran cuestionables y que sean fáciles de evitar (o modifique para evitar la advertencia), incluso junto con macros, en otras palabras, un conjunto de advertencias.

  • -Wextra le dice que habilite algunas advertencias más, aún no todas.

  • -Werror le dice que convierta todas las advertencias en errores.

  • -Wpedantico simplemente -pedanticle dice que:

    Emitir todas las advertencias exigidas por los estrictos ISO C e ISO C ++; rechazar todos los programas que usan extensiones prohibidas, y algunos otros programas que no siguen ISO C e ISO C ++.

  • -pedantic-errors le dice que dé un error siempre que el estándar base (ver -Wpedantic) requiera un diagnóstico.


Este conjunto generalmente es útil no solo para principiantes, ya que gradualmente aprenderán que cada advertencia tiene el potencial de provocar un error, sino también para un uso normal.

Todas las opciones de advertencia se describen en detalle aquí en la página GNU / GCC .

LinuxSecurityFreak
fuente