# line diretiva (C/C++)
O #line diretiva informa o pré-processador para alterar o número de linha armazenadas internamente do compilador e o nome de arquivo para um dado número de linha e o nome do arquivo.
#line digit-sequence ["filename"]
Comentários
O compilador usa o número da linha e o nome opcional para referir-se aos erros encontrados durante a compilação.O número da linha geralmente se refere à linha de entrada atual e o nome do arquivo refere-se ao arquivo de entrada.O número da linha é incrementado após cada linha é processada.
O seqüência de dígitos valor pode ser qualquer constante de inteiro.Substituição de macro pode ser executada em tokens de pré-processamento, mas o resultado deve ser avaliada como a sintaxe correta.O nome do arquivo pode ser qualquer combinação de caracteres e devem ser colocados entre aspas duplas ("").Se nome do arquivo é omitido, o nome de arquivo anterior permanecerá inalterado.
Você pode alterar o número da linha de código-fonte e o nome de arquivo, escrevendo um #line diretiva.O conversor usa o número de linha e o nome do arquivo para determinar os valores das macros predefinidas __FILE__ e __LINE__.Você pode usar essas macros para inserir mensagens de erro auto-descritivo no texto do programa.Para obter mais informações sobre essas macros predefinidas, consulte Macros predefinidas.
O __FILE__ macro se expande para uma seqüência de caracteres cujo conteúdo é o nome de arquivo entre aspas duplas ("").
Se você alterar o número de linha e o nome do arquivo, o compilador ignora os valores anteriores e continua o processamento com os novos valores.O #line diretiva é normalmente usada por geradores de programa para fazer com que as mensagens de erro referir-se o arquivo de origem em vez de para o programa gerado.
Os exemplos a seguir ilustram #line e o __LINE__ e __FILE__ macros.
Nesta declaração, o número da linha armazenadas internamente é definido como 151 e o nome do 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, se uma determinada "afirmação" não é verdade.
#define ASSERT(cond)
if( !(cond) )\
{printf( "assertion error line %d, file(%s)\n", \
__LINE__, __FILE__ );}