close
Espacios de nombres
Variantes

Nombre de archivo e información de línea

De cppreference.com

Cambia el número de línea actual y el nombre del archivo en el preprocesador.

Sintaxis

#line no-de-linea (1)
#line no-de-linea "nombre-del-archivo" (2)

Explicación

1) Cambia el número de línea del preprocesador actual a no-de-linea. Las ocurrencias de la macro __LINE__ más allá de este punto se expandirán al no-de-linea más el número de líneas de código fuente reales encontradas desde entonces.
2) También cambia el nombre del archivo del preprocesador actual a nombre-de-archivo. Las ocurrencias de la macro __FILE__ más allá de este punto producirán nombre-de-archivo.

Cualquier token de preprocesamiento (constantes o expresiones de macro) se permite como argumentos a #line siempre y cuando se expandan hasta un entero decimal válido seguidos opcionalmente de una cadena de caracteres válida.

El no-de-linea debe ser una secuencia de al menos un dígito decimal (de lo contrario, el programa está mal formado) y siempre se interpreta como decimal (incluso si comienza con 0).

Si el no-de-linea es 0 o mayor que 32767 (hasta C99)2147483647 (desde C99), el comportamiento sera indefinido.

Observaciones

Esta directiva es utilizada por algunas herramientas de generación automática de código que producen archivos fuente C a partir de un archivo escrito en otro idioma. En ese caso, las directivas #line pueden insertarse en el archivo C generado haciendo referencia a los números de línea y al nombre de archivo del archivo fuente original (editable por el ser humano).

El número de línea que sigue a la directiva #line __LINE__ está definido por la implementación (hay dos valores posibles a los que __LINE__ puede expandirse en este caso: el número de líneas finales vistas hasta ahora, o el número de líneas finales vistas hasta ahora más la línea final que termina la directiva #line).

Ejemplo

#include <assert.h>
#define FNAME "test.c"
int main(void)
{
#line 777 FNAME
        assert(2+2 == 5);
}

Posible salida:

test: test.c:777: int main(): Assertion `2+2 == 5' failed.

Referencias

  • Standard C11 (ISO/IEC 9899:2011):
  • 6.10.4 Line control (p: 173)
  • Standard C99 (ISO/IEC 9899:1999):
  • 6.10.4 Line control (p: 158)
  • Standard C89/C90 (ISO/IEC 9899:1990):
  • 3.8.4 Line control

Véase también

Documentación de C++ para Nombre de archivo e información de línea