2009-11-30 7 views
9

¿Qué opciones de gcc debo usar para hacer cumplir las advertencias/errores ANSI C (C99)? gcc (GCC) 3.4.2 (MinGW-especial)Opciones de GCC para hacer cumplir la verificación estándar de Ansi C?

estoy usando: gcc -pedantic -ansi -std = c99 es esto correcto?

+0

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. –

Respuesta

3
-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 su interés, pero solo -pedantic debe hacer lo que quiera.

+5

"ANSI C no es lo mismo que C99". ANSI ha adoptado C99 como estándar. Es solo que por cualquier razón, C89 pasó a llamarse "ANSI C", para distinguirlo de C pre-estándar, y el nombre se ha mantenido. –

7

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.

+0

Buenas observaciones. En cualquier caso, creo que dado que C permite tantas cosas peligrosas, la única manera razonable de trabajar es manejar * cualquier * advertencia como un error (es decir, no has terminado hasta que se compile con '-Werror'). Entonces no importa si algunos errores son mal informados como advertencias. – sleske

Cuestiones relacionadas