#line (Directiva)
Directiva de preprocesador que establece el número de línea almacenado internamente del compilador y el nombre de archivo en los valores especificados.
#line lineNumber "filename" |
---|
Parámetros
Elemento | Descripción |
---|---|
lineNumber |
Número de línea que se va a establecer. Puede ser cualquier constante de entero. El reemplazo de macros se puede realizar en los tokens de preprocesamiento, siempre que el resultado se evalúe como la sintaxis correcta. |
filename [optional] |
Nombre de archivo que se va a establecer. El nombre de archivo puede ser cualquier combinación de caracteres y debe ir entre comillas dobles (" "). Si se omite este parámetro, el nombre de archivo anterior permanece sin cambios. |
Comentarios
El compilador usa el número de línea y el nombre de archivo para hacer referencia a 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. 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. Normalmente, los generadores de programas usan la directiva #line para hacer referencia al archivo de código fuente original en lugar del programa generado.
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. La macro __FILE__ se expande a una cadena delimitada por comillas dobles (" ") cuyo contenido es el nombre de archivo.
Ejemplos
En el ejemplo siguiente se establece el número de línea en 151 y el nombre de archivo en "copy.c".
#line 151 "copy.c"
En el ejemplo siguiente, la macro ASSERT usa las macros predefinidas __LINE__ y __FILE__ para imprimir un mensaje de error sobre el archivo de origen si la aserción especificada no es true.
#define ASSERT(cond)
if( !(cond) )\
{printf( "assertion error line %d, file(%s)\n", \
__LINE__, __FILE__ );}