Filename and line information
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
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
|