¿Cuál es el significado de las líneas que comienzan con un signo de almohadilla y un número como '# 1 "ac"' en la salida del preprocesador gcc?

Resuelto user607722 asked hace 13 años • 3 respuestas

Imprimo la salida del preprocesador C usando

gcc -E a.c

La salida contiene muchas líneas como

# 1 "a.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "a.c"
# 1 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/stdio.h" 1 3
# 19 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/stdio.h" 3
# 1 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/_mingw.h" 1 3
# 31 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/_mingw.h" 3
       
# 32 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/_mingw.h" 3
# 20 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/stdio.h" 2 3

Nunca he visto este tipo de sintaxis en C. ¿Alguien puede explicar qué hace esto?

user607722 avatar Mar 21 '11 01:03 user607722
Aceptado

Estas líneas son sugerencias para la depuración (de dónde proviene realmente el código que sigue a la línea)

# line-number "source-file" [flags]

Significado de las banderas (separadas por espacios):

  • 1 - Inicio de un nuevo archivo
  • 2 - Volviendo al archivo anterior
  • 3: el siguiente texto proviene de un archivo de encabezado del sistema (#include <> vs #include "")
  • 4 - El texto siguiente debe tratarse como si estuviera incluido en un bloque "C" externo implícito.
jdehaan avatar Mar 20 '2011 18:03 jdehaan

Estos marcadores de línea se mencionan en man gccla -Popción.

La -Popción está destinada específicamente a eliminar estas líneas para mayor claridad:

gcc -E -P source.c

Ver documentación detallada (respondida antes).

uvsmtid avatar Aug 01 '2012 15:08 uvsmtid

Esas son directivas de sincronización de líneas, que permiten gccdar mensajes de error correctos para errores en #includearchivos d. Otros preprocesadores (como yacc/ bison) utilizan el mismo mecanismo para relacionar los errores de C con las líneas correctas del .yarchivo de entrada.

geekosaur avatar Mar 20 '2011 18:03 geekosaur