con - ¿Opciones de GCC para el código C más estricto?
gcc ubuntu (2)
Este conjunto de opciones es bastante bueno:
-Wall -Wextra -ansi -pedantic
Tendrá que leer la documentación para ver si esa combinación omite algunas advertencias adicionales.
Se le debe advertir que el C89 estricto no incluye soporte para //
comentarios de estilo, y hay algunas restricciones bastante serias en el número de caracteres significativos en los nombres de los objetos con vínculos externos.
Esta pregunta ya tiene una respuesta aquí:
¿Qué opciones de GCC deben configurarse para que GCC sea lo más estricto posible? (y quiero decir lo más estricto posible) Estoy escribiendo en C89 y quiero que mi código sea compatible con ANSI / ISO.
Recomiendo usar:
-Wall -Wextra -std=c89 -pedantic -Wmissing-prototypes -Wstrict-prototypes /
-Wold-style-definition
Debería compilar con -O
y -g
ya que algunas advertencias solo están disponibles cuando se usa el optimizador (en realidad, generalmente uso -O3
para detectar problemas). Es posible que prefiera -std=gnu89
ya que deshabilita menos extensiones en las bibliotecas. OTOH, si está codificando según el estricto ANSI C89, tal vez quiera deshabilitarlos. La opción -ansi
es equivalente a -std=c89
pero no tan explícita o flexible.
Los prototipos faltantes le advierten sobre las funciones que se utilizan (o las funciones externas definidas) sin un prototipo en su alcance. Los prototipos estrictos significan que no puede usar ''paréntesis vacíos'' para declaraciones de funciones o definiciones (o punteros de funciones); Usted necesita (void)
o la lista de argumentos correcta. La definición de estilo antiguo muestra las definiciones de funciones de estilo K&R, tales como:
int old_style(a, b) int a; double b; { ... }
Si tienes suerte, no tendrás que preocuparte por eso. No tengo tanta suerte en el trabajo, y no puedo usar prototipos estrictos, para mi disgusto, porque hay demasiados indicadores de funciones descuidadas alrededor.
Ver también: ¿Cuál es la mejor herramienta de línea de comandos para limpiar el código?