Esta es una vieja pregunta, pero solo quería agregar algunos puntos extra.
En primer lugar, sin tener en cuenta el conjunto de los genéricos de línea de comandos que usted suministra a GCC, en la actualidad no parece ser posible hacer GCC para informar de todas las violaciónes restricción como "errores" y todo lo demás como "advertencias ". Algunos de los mensajes de diagnóstico que GCC informa como "advertencias" son infracciones de restricción (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 posible que se pueda lograr una separación más precisa afinando los tipos de advertencia individuales, pero no estoy seguro de que la configuración de GCC brinde suficiente granularidad para lograr una buena coincidencia.
En segundo lugar, GCC proporciona la opción -pedantic-errors
que se puede utilizar en lugar de -pedantic
, que tiene como objetivo permitir una clasificación más precisa de los 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 infracciones de restricciones se notifiquen como "errores". Pensé que podrías haber querido decir algo así cuando mencionaste "aplicar advertencias/errores" en tu pregunta.
ANSI publicó el estándar C original en 1989. ISO publicó su versión del mismo estándar en 1990, y ANSI adoptó oficialmente esa versión. ISO publicó nuevas ediciones del estándar en 1999 y 2011, y ANSI ha adoptado cada una de ellas, haciendo que las ediciones anteriores sean oficialmente obsoletas. De manera confusa, el término "ANSI C" todavía se usa comúnmente (e incorrectamente) para referirse al lenguaje definido por las ediciones de 1989/1990, y 'gcc -ansi' todavía se refiere a esa versión. Sugiero que el término "ANSI C" sea ambiguo y se debe evitar. Consulte C89/C90, C99 o C11 en su lugar. –