Compartir a través de


Directiva #line (C/C++)

La directiva #line indica al preprocesador que establezca los valores notificados por el compilador para el número de línea y el nombre de archivo en un número de línea y un nombre de archivo determinados.

Sintaxis

#linedigit-sequence ["filename"]

Comentarios

El compilador utiliza el número de línea y el nombre de archivo opcional para hacer referencia a los errores que encuentra durante la compilación. El número de línea suele referirse a la línea de entrada actual, y el nombre de archivo hace referencia al archivo de entrada actual. El número de línea se incrementa una vez que se procesa cada línea.

El valor digit-sequence puede ser cualquier constante entera dentro del intervalo comprendido entre 0 y 2147483647, ambos incluidos. El reemplazo de macros se puede utilizar en los tokens de preprocesamiento, pero el resultado debe evaluarse como la sintaxis correcta. filename puede ser cualquier combinación de caracteres y se debe especificar entre comillas dobles (" "). Si se omite filename, el nombre de archivo anterior permanece sin cambios.

Se puede cambiar el número de línea y el nombre de archivo de código fuente mediante una directiva #line. La directiva #line establece el valor de la línea que sigue inmediatamente a la directiva en el archivo de origen. El traductor utiliza el número de línea y el nombre de archivo para determinar los valores de las macros predefinidas __FILE__ y __LINE__. Estas macros se pueden utilizar para insertar mensajes de error autodescriptivos en el texto del programa. Para obtener más información sobre estas macros predefinidas, vea Macros predefinidas.

La macro __FILE__ se expande a una cadena delimitada por comillas dobles (" ") cuyo contenido es el nombre de archivo.

Si se cambia el número de línea y el nombre de archivo, el compilador omite los valores anteriores y continúa el procesamiento con los nuevos valores. Los generadores de programas suelen emplear la directiva #line para hacer que los mensajes de error hagan referencia al archivo de código fuente original en lugar de al programa generado.

Ejemplo

En los ejemplos siguientes se muestran #line y las macros __LINE__ y __FILE__.

En el primer ejemplo, el número de línea se establece en 10 y después en 20, y el nombre de archivo se cambia a hello.cpp.

// line_directive.cpp
// Compile by using: cl /W4 /EHsc line_directive.cpp
#include <stdio.h>

int main()
{
    printf( "This code is on line %d, in file %s\n", __LINE__, __FILE__ );
#line 10
    printf( "This code is on line %d, in file %s\n", __LINE__, __FILE__ );
#line 20 "hello.cpp"
    printf( "This code is on line %d, in file %s\n", __LINE__, __FILE__ );
    printf( "This code is on line %d, in file %s\n", __LINE__, __FILE__ );
}
This code is on line 7, in file line_directive.cpp
This code is on line 10, in file line_directive.cpp
This code is on line 20, in file hello.cpp
This code is on line 21, in file hello.cpp

En este ejemplo, la macro ASSERT utiliza las macros predefinidas __LINE__ y __FILE__ para imprimir un mensaje de error relativo al archivo de código fuente si una aserción especificada no es true.

#define ASSERT(cond) if( !(cond) )\
{printf( "assertion error line %d, file(%s)\n", \
__LINE__, __FILE__ );}

Consulte también

Directivas de preprocesador