Namespaces
Variants

Filename and line information

From cppreference.net

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

Contenidos

Sintaxis

#line lineno (1)
#line lineno " filename " (2)

Explicación

1) Cambia el número de línea actual del preprocesador a lineno . Las ocurrencias de la macro __LINE__ después de este punto se expandirán a lineno 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 filename . Las ocurrencias de la macro __FILE__ después de este punto producirán filename .

Cualquier token de preprocesamiento (constantes de macro o expresiones) está permitido como argumento para #line siempre que se expandan a un entero decimal válido opcionalmente seguido de una cadena de caracteres válida.

lineno debe ser una secuencia de al menos un dígito decimal (el programa está mal formado en caso contrario) y siempre se interpreta como decimal (incluso si comienza con 0 ).

Si lineno es 0 o mayor que 32767 (hasta C99) 2147483647 (desde C99) , el comportamiento es indefinido.

Notas

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

El número de línea que sigue a la directiva #line __LINE__ no está especificado (hay dos valores posibles que __LINE__ puede expandir en este caso: número de saltos de línea vistos hasta ahora, o número de saltos de línea vistos hasta ahora más el salto de línea que termina la #line directiva). Esto es el resultado de DR 464 , que se aplica retroactivamente.

Ejemplo

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

Salida posible:

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

Referencias

  • Estándar C17 (ISO/IEC 9899:2018):
  • 6.10.4 Control de línea (p: 126)
  • J.1 Comportamiento no especificado
  • Estándar C11 (ISO/IEC 9899:2011):
  • 6.10.4 Control de línea (p: 173)
  • Estándar C99 (ISO/IEC 9899:1999):
  • 6.10.4 Control de línea (p: 158)
  • Estándar C89/C90 (ISO/IEC 9899:1990):
  • 3.8.4 Control de línea

Véase también

Documentación de C++ para Información de archivo y línea