Diretiva #line
Diretiva de pré-processador que define o número de linha armazenado internamente do compilador e o nome do arquivo para os valores especificados.
#line lineNumber "filename" |
---|
Parâmetros
Item | Descrição |
---|---|
Linenumber |
Número de linha a ser definido. Isso pode ser qualquer constante de inteiro. A substituição de macro pode ser executada nos tokens de pré-processamento, desde que o resultado seja avaliado como a sintaxe correta. |
filename [opcional] |
Nome do arquivo a ser definido. O nome do arquivo pode ser qualquer combinação de caracteres e deve ser colocado entre aspas duplas (" "). Se esse parâmetro for omitido, o nome do arquivo anterior permanecerá inalterado. |
Comentários
O compilador usa o número de linha e o nome do arquivo para se referir aos erros encontrados 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. 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. A diretiva #line normalmente é usada por geradores de programas para fazer com que as mensagens de erro se refiram ao arquivo de origem original em vez do programa gerado.
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. A macro __FILE__ se expande em uma cadeia de caracteres cujo conteúdo é o nome de arquivo entre aspas duplas (" ").
Exemplos
O exemplo a seguir define o número de linha como 151 e o nome do arquivo como "copy.c".
#line 151 "copy.c"
No exemplo a seguir, a macro ASSERT usa as macros predefinidas __LINE__ e __FILE__ para imprimir uma mensagem de erro sobre o arquivo de origem se a declaração especificada não for verdadeira.
#define ASSERT(cond)
if( !(cond) )\
{printf( "assertion error line %d, file(%s)\n", \
__LINE__, __FILE__ );}