¿Opciones de GCC para hacer cumplir la verificación estándar de Ansi C?
Pregunta
¿Qué opciones de gcc debo usar para hacer cumplir las advertencias / errores ANSI C (C99)? gcc (GCC) 3.4.2 (mingw-special)
Estoy usando: gcc -pedantic -ansi -std = c99 ¿Es esto correcto?
Solución
El indicador -ansi
es sinónimo del indicador -std = c89
.
Simplemente usar -std = c99
con -pedantic
debería ser suficiente.
En caso de duda, siempre puede consulte la documentación de GCC . A partir de GCC 3.4.2, el capítulo a leer es 2 - Estándares de idiomas compatibles con GCC .
Otros consejos
Esta es una vieja pregunta pero solo quería agregar algunos puntos extra.
En primer lugar, independientemente del conjunto de modificadores de línea de comandos genéricos que suministre a GCC, actualmente no parece posible hacer que GCC informe todas las violaciones de restricciones como " errores " y todo lo demás como "advertencias". Algunos de los mensajes de diagnóstico que GCC informa como '' advertencias '' son, de hecho, violaciones de restricciones (es decir, " errores ") desde el punto de vista del lenguaje C, pero no hay forma de obligar a GCC a reconocer ese hecho y generar un " error " diagnóstico. Es muy probable que se pueda lograr una separación más precisa ajustando los tipos de advertencia individuales, pero no estoy seguro de que la configuración de GCC proporcione suficiente granularidad para lograr una buena coincidencia.
En segundo lugar, GCC proporciona la opción -pedantic-errors
que se puede usar en lugar de -pedantic
simple, que está destinado a permitir una mayor precisión (como se describió anteriormente) clasificación de mensajes de diagnóstico en "errores" y "advertencias". Sin embargo, todavía no es perfecto.
P.S. La especificación del lenguaje no requiere / define la separación de los mensajes de diagnóstico en " errores " y "advertencias", pero en la práctica muchos programadores esperan que las violaciones de restricciones se notifiquen como "errores". Pensé que podrías haber querido decir algo así cuando mencionaste "hacer cumplir advertencias / errores". en tu pregunta.
-ansi
In C mode, this is equivalent to -std=c89. In C++ mode, it is equivalent to -std=c++98.
ANSI C no es lo mismo que C99 (todavía). Además, -Wall
también puede ser de interés, pero solo -pedantic
debe hacer lo que desee.