logo

Processo de compilação em c

O que é uma compilação?

A compilação é um processo de conversão do código-fonte em código-objeto. Isso é feito com a ajuda do compilador. O compilador verifica o código-fonte em busca de erros sintáticos ou estruturais e, se o código-fonte estiver livre de erros, ele gera o código-objeto.

Processo de compilação em c

O processo de compilação c converte o código-fonte obtido como entrada em código-objeto ou código de máquina. O processo de compilação pode ser dividido em quatro etapas, ou seja, pré-processamento, compilação, montagem e vinculação.

O pré-processador pega o código-fonte como entrada e remove todos os comentários do código-fonte. O pré-processador pega a diretiva do pré-processador e a interpreta. Por exemplo, se , a diretiva está disponível no programa, então o pré-processador interpreta a diretiva e substitui esta diretiva pelo conteúdo do 'stdio.h' arquivo.

iterar mapa em java

A seguir estão as fases pelas quais nosso programa passa antes de ser transformado em um formato executável:

    Pré-processador Compilador Montador Vinculador
Processo de compilação em c

Pré-processador

O código-fonte é o código escrito em um editor de texto e o arquivo do código-fonte recebe a extensão '.c'. Este código-fonte é primeiro passado para o pré-processador e, em seguida, o pré-processador expande esse código. Após expandir o código, o código expandido é passado para o compilador.

Compilador

O código que é expandido pelo pré-processador é passado para o compilador. O compilador converte esse código em código assembly. Ou podemos dizer que o compilador C converte o código pré-processado em código assembly.

Montador

O código assembly é convertido em código objeto usando um assembler. O nome do arquivo objeto gerado pelo assembler é igual ao arquivo fonte. A extensão do arquivo objeto no DOS é '.obj' e no UNIX a extensão é 'o'. Se o nome do arquivo fonte for 'olá.c', então o nome do arquivo objeto seria 'hello.obj'.

Vinculador

Principalmente, todos os programas escritos em C usam funções de biblioteca. Essas funções de biblioteca são pré-compiladas e o código objeto desses arquivos de biblioteca é armazenado com extensão '.lib' (ou '.a'). O principal trabalho do vinculador é combinar o código-objeto dos arquivos da biblioteca com o código-objeto do nosso programa. Às vezes surge uma situação quando nosso programa se refere a funções definidas em outros arquivos; então o linker desempenha um papel muito importante nisso. Ele vincula o código objeto desses arquivos ao nosso programa. Portanto, concluímos que a função do vinculador é vincular o código-objeto do nosso programa ao código-objeto dos arquivos da biblioteca e outros arquivos. A saída do vinculador é o arquivo executável. O nome do arquivo executável é igual ao arquivo de origem, mas difere apenas em suas extensões. No DOS, a extensão do arquivo executável é '.exe' e no UNIX, o arquivo executável pode ser nomeado como 'a.out'. Por exemplo, se estivermos usando a função printf() em um programa, o vinculador adiciona seu código associado em um arquivo de saída.

Vamos entender através de um exemplo.

olá.c

 #include int main() { printf('Hello javaTpoint'); return 0; } 

Agora, criaremos um diagrama de fluxo do programa acima:

Processo de compilação em c

No diagrama de fluxo acima, as seguintes etapas são executadas para executar um programa:

  • Em primeiro lugar, o arquivo de entrada, ou seja, Olá.c, é passado para o pré-processador, e o pré-processador converte o código-fonte em código-fonte expandido. A extensão do código-fonte expandido seria olá.i.
  • O código-fonte expandido é passado para o compilador, e o compilador converte esse código-fonte expandido em código assembly. A extensão do código assembly seria Olá.
  • Esse código assembly é então enviado ao assembler, que converte o código assembly em código objeto.
  • Após a criação de um código objeto, o vinculador cria o arquivo executável. O carregador irá então carregar o arquivo executável para a execução.