Diretiva #line (C/C++)
A política #line instrui o pré-processador a alterar o número de linha e nome de arquivo do compilador armazenados internamente para um dado número de linha e nome de arquivo.
#line digit-sequence ["filename"]
Comentários
O compilador usa o número de linha e o nome de arquivo opcional para fazer referência aos erros que encontra durante a compilação. O número de linha geralmente se refere à linha de entrada atual, e o nome de arquivo se refere ao arquivo de entrada atual. O número de linha é incrementado depois que cada linha é processada.
O valor digit-sequence pode ser qualquer constante inteira. É possível executar a substituição de macro nos tokens de pré-processamento, mas o resultado deve ser avaliado com a sintaxe correta. filename pode ser qualquer combinação de caracteres e deve estar entre aspas duplas (" "). Se filename for omitido, o nome de arquivo anterior permanecerá inalterado.
Você pode alterar o número de linha e o nome de arquivo de origem escrevendo uma política #line. O conversor usa o número de linha e o nome de arquivo para determinar os valores das macros predefinidas __FILE__ e __LINE__. Você pode usar essas macros para inserir mensagens de erro autodescritivas no texto do programa. Para obter mais informações sobre essas macros predefinidas, consulte Macros predefinidas.
A macro __FILE__ se expande em uma cadeia de caracteres cujo conteúdo é o nome de arquivo entre aspas duplas (" ").
Se você alterar o número de linha e o nome de arquivo, o compilador irá ignorar os valores anteriores e continuar o processamento com os novos valores. Em geral, a política #line é usada por geradores de programas para fazer com que as mensagens de erro se refiram ao arquivo de origem original em vez de ao programa gerado.
Os exemplos a seguir ilustram #line e as macros __LINE__ e __FILE__.
Nesta instrução, o número de linha armazenado internamente é definido como 151 e o nome de arquivo é alterado para copy.c.
#line 151 "copy.c"
Neste exemplo, a macro ASSERT usa as macros predefinidas __LINE__ e __FILE__ para imprimir uma mensagem de erro sobre o arquivo de origem caso uma dada "asserção" não seja válida.
#define ASSERT(cond)
if( !(cond) )\
{printf( "assertion error line %d, file(%s)\n", \
__LINE__, __FILE__ );}