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. É feito com a ajuda do compilador. O compilador verifica o código fonte para erros sintáticos ou estruturais, e se o código fonte é livre de erros, então ele gera o código objeto.
The c compilation process converts the source code taken as input into the object code or machine code. O processo de compilação pode ser dividido em quatro etapas, i.e., Pré-processamento, Compilação, montagem e ligação.
o pré-processador toma o código fonte como uma entrada, e remove todos os comentários do código fonte. O pré-processador toma a Directiva do pré-processador e interpreta-a. Por exemplo, se <stdio.h >, a directiva está disponível no programa, em seguida, o pré-processador interpreta a directiva e substitui esta directiva pelo conteúdo do ‘ stdio.h ‘ file.
A seguir estão as fases através das quais nosso programa passa antes de ser transformado em uma forma executável:
- Preprocessor
- Compilador
- Montador
- Linker
Preprocessor
o código fonte é O código que é escrito em um editor de texto e o ficheiro de código de origem é dada uma extensão “.C”. Este código fonte é primeiramente passado ao pré-processador, e então o pré-processador expande este código. Depois de 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 este código em código de montagem. Ou podemos dizer que o compilador C converte o código pré-processado em código de montagem.
Montador
o código de montagem é convertido em código objeto usando um montador. O nome do arquivo objeto gerado pelo montador é o mesmo que o arquivo fonte. A extensão do arquivo objeto em DOS é ‘.obj,’ e no UNIX, a extensão é ‘o’. Se o nome do ficheiro de código for ‘hello’.c’, então o nome do arquivo objeto seria ‘ Olá.obj’.
Linker
principalmente, todos os programas escritos em C usam funções de biblioteca. Estas funções da biblioteca são pré-compiladas, e o código objeto destes arquivos da Biblioteca é armazenado com ‘.lib” (ou”.a) extensão. O trabalho principal do linker é combinar o código objeto de arquivos da biblioteca com o código objeto de nosso programa. Às vezes a situação surge quando nosso programa se refere às funções definidas em outros arquivos; então linker desempenha um papel muito importante nisso. Ele liga o código objeto destes arquivos para o nosso programa. Portanto, concluímos que o trabalho do linker é vincular o código objeto de nosso programa com o código objeto dos arquivos da biblioteca e outros arquivos. O resultado do linker é o arquivo executável. O nome do arquivo executável é o mesmo que o arquivo fonte, mas difere apenas em suas extensões. Em 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 estamos usando a função printf() em um programa, então o linker adiciona seu código associado em um arquivo de saída.
vamos entender através de um exemplo.Olá.c
Agora, vamos criar um diagrama de fluxo do programa acima:
No diagrama de fluxo acima, são executados os seguintes passos para executar um programa:
- em Primeiro lugar, o arquivo de entrada, i.e., 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 hello.I.
- o código fonte expandido é passado para o compilador, e o compilador converte este código fonte expandido em código conjunto. A extensão do código de montagem seria hello.S.
- este código de montagem é então enviado para o montador, que converte o código de montagem em código objeto.
- após a criação de um código objeto, o linker cria o arquivo executável. O carregador irá então carregar o ficheiro executável para a execução.