Pré-processador

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa
Question book.svg
Esta página ou secção não cita nenhuma fonte ou referência, o que compromete sua credibilidade (desde maio de 2011).
Por favor, melhore este artigo providenciando fontes fiáveis e independentes, inserindo-as no corpo do texto por meio de notas de rodapé. Encontre fontes: Googlenotícias, livros, acadêmicoScirus. Veja como referenciar e citar as fontes.

Um pré-processador é um programa que recebe texto e efectua conversões léxicas nele. As conversões podem incluir substituição de macros, inclusão condicional e inclusão de outros ficheiros.

A linguagem de programação C possui um pré-processador que efectua as seguintes transformações:

  • substitui trigrafos por equivalentes
  • concatena ficheiros de código-fonte
  • substitui comentários por espaços em branco
  • reage a linhas iniciadas com um caracter de cardinal (#), efectuando substituição de macros, inclusão de ficheiros, inclusão condicional e outras operações

O uso de pré-processadores tem vindo a ser cada vez menos comum à medida que as linguagens recentes fornecem características mais abstractas em vez de características orientadas lexicalmente. É certo que o abuso do pré-processador pode dar origem a código caótico. A o desenhar uma linguagem de programação baseada em C, Bjarne Stroustrup introduziu características tais como funções em linha e modelos na linguagem C++ numa tentativa de tornar o pré-processador de C menos relevante. Há também linguagens recentes que tem pouca ou nenhuma funcionalidade de pré-processador, como por exemplo a linguagem Java, que não possui um pré-processador. O pré-processamento pode ser bastante incómodo ao implementar-se análise gramatical incremental ou análise léxica incremental, pois alterações às regras de pré-processamento podem afectar por completo o texto a ser pré-processado.

[editar] Exemplo de C

Um exemplo típico em C é:

# include <stdio.h>
# define FOO 0
 
int main (void)
{
    /*
    versão alterada do programa "olá mundo"
* /
    printf("Olá, Mundo!\n");
    return FOO;
}

O pré-processador de C, ao analisar este código-fonte, efectua as seguintes alterações:

  • substitui a linha #include <stdio.h> pelo ficheiro-cabeçalho com aquele nome, o que torna possivel a utilização da subrotina printf().
  • substitui o texto comentado (texto entre simbolos /* e */ por espaço em branco.
  • substitui o termo FOO na expressão return FOO; por 0

Outro exemplo de um recurso bastante comum, conhecido por "Include Guards", utilizado em arquivos header:

# ifndef _LIBRARY_H
# define _LIBRARY_H
/*
Todo código que define o conteúdo deste arquivo header: assinatura de funções, definição de constantes, etc...
* /
# endif

Isso garante que um determinado arquivo header será incluído apenas uma vez durante a compilação de um projeto. A primeira vez que for encontrado #include <library.h> o símbolo _LIBRARY_H não estará definido, portanto #ifndef será verdadeiro e o próximo passo executado pelo compilador será definir esse símbolo _LIBRARY_H e compilar todo código. Caso haja, em outro arquivo .c pertencente ao mesmo projeto, a diretiva #include <library.h>, então dessa vez #ifndef _LIBRARY_H será falso e nada deste arquivo header será compilado novamente. Caso essas diretivas de compilação condicional não estivessem presentes seriam gerados erros de compilação ao incluir mais de uma vez o mesmo arquivo header.

Ícone de esboço Este artigo sobre Programação é um esboço. Você pode ajudar a Wikipédia expandindo-o.
Ferramentas pessoais
Espaços nominais

Variantes
Ações
Navegação
Colaboração
Imprimir/exportar
Ferramentas
Noutras línguas