Namespaces
Variants

Filename and line information

From es.cppreference.net
C++ language
General topics
Flow control
Conditional execution statements
Iteration statements (loops)
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications ( until C++17* )
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Storage duration specifiers
Initialization
Expressions
Alternative representations
Literals
Boolean - Integer - Floating-point
Character - String - nullptr (C++11)
User-defined (C++11)
Utilities
Attributes (C++11)
Types
typedef declaration
Type alias declaration (C++11)
Casts
Memory allocation
Classes
Class-specific function properties
Special member functions
Templates
Miscellaneous

Cambia el número de línea del código fuente y, opcionalmente, el nombre del archivo actual, 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 expansiones de la macro __LINE__ más allá 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 de preprocesador actual a filename . Las expansiones de la macro __FILE__ a partir 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 (until C++11) 2147483647 (since C++11) , el comportamiento es indefinido.

Notas

Esta directiva es utilizada por algunas herramientas automáticas de generación de código que producen archivos fuente 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).

Ejemplo

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

Salida posible:

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

Referencias

  • Estándar C++23 (ISO/IEC 14882:2024):
  • 15.7 Control de línea [cpp.line]
  • Estándar C++20 (ISO/IEC 14882:2020):
  • 15.7 Control de línea [cpp.line]
  • Estándar C++17 (ISO/IEC 14882:2017):
  • 19.4 Control de línea [cpp.line]
  • Estándar C++14 (ISO/IEC 14882:2014):
  • 16.4 Control de línea [cpp.line]
  • Estándar C++11 (ISO/IEC 14882:2011):
  • 16.4 Control de línea [cpp.line]
  • Estándar C++98 (ISO/IEC 14882:1998):
  • 16.4 Control de línea [cpp.line]

Véase también

una clase que representa información sobre el código fuente, como nombres de archivo, números de línea y nombres de función
(clase)
Documentación de C para Información de nombre de archivo y línea