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.
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
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:
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.