Programar em C/Noções de compilação

Origem: Wikilivros, livros abertos por um mundo aberto.


Esta página é um esboço de informática. Ampliando-a você ajudará a melhorar o Wikilivros.


Compilação[editar | editar código-fonte]

Todo o código em linguagem C que escrevermos deve ser salvo em um arquivo, em formato texto, com a extensão ".c". Esse código não tem significado nenhum para a unidade de processamento; para que o processador possa executar nosso programa, este deve ser traduzido para a linguagem de máquina. Essa tradução se chama compilação e é feita pelo programa denominado compilador.

O compilador lê todo o código e cria um arquivo executável, em linguagem de máquina, específica para uma arquitetura de processadores e para um tipo de sistema operacional, o que significa que um programa compilado no Windows, por exemplo, não rodará nativamente no Linux se simplesmente copiarmos o executável. Devemos, para isso, recompilar o código-fonte do programa.

No Windows, os arquivos executáveis são aqueles com extensão ".exe". No Linux, os executáveis são simplesmente arquivos com o atributo "executável".

Etapas da compilação[editar | editar código-fonte]

O processo que chamamos corriqueiramente de compilação na verdade é um conjunto de etapas:

  • o preprocessamento, etapa em que o pré-processador (programa às vezes acoplado ao compilador) lê o código-fonte e faz algumas substituições para que o programa possa ser compilado. Em C, o preprocessador tem diversos usos: compilação condicional (por exemplo, usar trechos diferentes do código para sistemas operacionais diferentes), macros, substituição de símbolos e inclusão de arquivos externos que declaram funções e variáveis.
  • a verificação sintática, que procura por eventuais erros nos códigos dos programas: parênteses não fechados, falta de ponto-e-vírgula no final da instrução, etc. Todos esses problemas são alertados e causam a interrupção da compilação.
  • a compilação propriamente dita, que transforma o código preprocessado em um programa-objeto, que está em linguagem de máquina porém não pronto para ser executado.
  • a linkedição (linking, em inglês) dos programas-objeto e bibliotecas necessárias em um único executável, feita pelo linkeditor (linker). Em C, pode-se distribuir um programa em vários arquivos-fonte, o que ajuda na organização e permite compilar apenas a parte do programa correspondente quando é necessário realizar alguma mudança. Na montagem, todas as partes constituintes do programa são deslocadas e/ou cortadas conforme necessário para que tenhamos um programa executável.