2011-07-28 11 views
6

¿es posible forzar a gcc a informar errores, pero seguir compilando más allá de ellos? Básicamente, estoy tratando de generar una lista de errores en un archivo .c, pero gcc siempre termina en el primer error. He estado buscando en Google por un tiempo y esta no es una respuesta obvia a partir de lo que puedo decir.Cómo obtener gcc para omitir errores, pero aún así generarlos.

Respuesta

0

Las versiones actualizadas de GCC intentarán omitir ciertos errores cuando sea posible.

Digamos que el cuerpo de foo(){... contiene una violación de const. La unidad de traducción no producirá un archivo objeto, pero cualquier compilador decente continuará más allá de este error en bar(){...

Otros errores no se pueden recuperar. Si te pierdes algunas llaves, no hay una conjetura razonable acerca de cómo proceder.

+0

¿El compilador indica si un error es irrecuperable? Por ejemplo, a continuación, publicaré algunos resultados. make continúa con el siguiente objeto, pero no está claro si el error gcc anterior dio como resultado una terminación de la compilación de ese objeto, o si realmente continuó pero pasó a no encontrar más errores. – chrisvarnz

+0

CC [M] /home/stebar01/elba/crystalhd/07032010/driver/linux/crystalhd_lnx.o /home/stebar01/elba/crystalhd/07032010/driver/linux/crystalhd_lnx.c:356:2: error: desconocido campo 'ioctl' especificado en el inicializador /home/stebar01/elba/crystalhd/07032010/driver/linux/crystalhd_lnx.c:356:2: advertencia: inicialización desde el tipo de puntero incompatible make [2]: [/ home/stebar01/elba/crystalhd/07032010/driver/linux/crystalhd_lnx.o] Error 1 (ignorado) CC [M] /home/stebar01/elba/crystalhd/07032010/driver/linux/crystalhd_hw.o – chrisvarnz

+0

Cambié el material ioctl a unlocked_ioctl y este objeto se compiló sin problemas, ¡así que creo que lo anterior muestra un ejemplo de gcc continuando después del error! gracias por la explicación – chrisvarnz

2

GCC termina cuando no puede ir más allá.

Si un compilador encuentra un error, tiene que adivinar cuál debería ser el código correcto e intentar seguirlo. Efectivamente eso significa que siempre debe corregir el primer error y volver a ejecutar las compilaciones, ya que el resto no tendrá sentido.

Asegúrese de que no ha activado -Wfatal-errors.

+3

El cartel parece dispuesto a renunciar a tener ninguna salida compilada a favor de tener una lista completa de errores. Algunos errores no interrumpirían el análisis del programa a pesar de que impedirían la salida. Pero otros, digamos que no coinciden() o {} o "", probablemente requerirían un gran grado de inteligencia para recuperarse hasta el punto en que el análisis posterior podría ser significativo. –

+0

Esto es correcto, me podría importar menos en este punto sobre un objeto de salida, solo me preocupa una lista de errores. La mayoría de los errores se deben a que estoy intentando construir un módulo de kernel para ARCH = brazo en lugar de x86, y hay muchos detalles de x86, es decir, rdtscll (lee el contador de marca de tiempo, que es específico de x86), por lo que generalmente la estructura del código y la sintaxis está bien. – chrisvarnz

0

De gcc online doc:

-fmax-errors=n

Limits the maximum number of error messages to n, at which point GCC bails out rather than attempting to continue processing the source code. If n is 0 (the default), there is no limit on the number of error messages produced. If -Wfatal-errors is also specified, then -Wfatal-errors takes precedence over this option.

Cuestiones relacionadas