# Programar em C++/Compilação

código fonte compilar desbloquear Cc++
Compilação é o processo de "tradução" do programa escrito em uma linguagem de programação para um formato no qual o computador entenda. A compilação gera um ficheiro - arquivo em português brasileiro - binário (executável) a partir do código fonte.

## A tradução do código para o computador

Em C e C++ são 3 os programas usados para fazer a tradução do código fonte (que são as linhas de código que o programador escreve) num ficheiro executável, que o computador pode executar:
* Preprocessor - pré-processador
* Compiler - compilador
* Linker - lincador (ou ligador)

## Pré-processador

Este é um programa que busca no código fonte – no código que escrevemos – por diretivas que foram dirigidas a ele, ou seja linhas iniciadas com “#”, assim o pré-processador sabe que aquela instrução é dirigida para ele. No exemplo tínhamos:
Então o pré-processador inclui ficheiros localizados no ficheiro iostream. Então tínhamos o código fonte que depois é transformado num outro código fonte de acordo com as diretivas pré-processadas.
Essencialmente, o pré-processador é um processador de macros para uma linguagem de alto nível.

## Compilador

Compilador é um programa que pega código fonte preprocessado e o traduz em instruções de linguagem de máquina, linguagem que o computador entende. Estas são guardadas num arquivo a parte, chamado de "object file" e tem a extensão .o ou .obj dependendo do compilador. Existem diferentes compiladores para diferentes linguagens de programação. Essa tradução é feita se o código estiver na linguagem que o compilador compilar. Existem regras de escrita e de gramática. No caso de existir um erro de sintaxe, então dará um erro de compilação.

## Linker

Apesar do nosso "object file" ter as instruções em linguagem máquina, o computador ainda não poder correr como um programa. A razão é que é necessário outro código da biblioteca, que é o código do run-time library, que é para as operações comuns tipo a tradução o input do teclado ou a capacidade para interagir com hardware externo tipo o monitor para apresentar uma mensagem. Estas bibliotecas run-time costumam já estar instaladas com o sistema operacional, caso isso não aconteça teremos de fazer o download delas.
Então o resultado da combinação do "object file" com as partes necessárias da biblioteca run-time fazem finalmente a criação de um ficheiro executável com a extensão .exe

## Processo de compilação

Em primeiro lugar, vamos escrever um código que está na linguagem C++ e vamos gravar esse código todo num ficheiro, que é uma quantidade de memória no computador. Esse ficheiro fica com a terminação “.CPP” ou .CP ou C.. Chama-se a este conjunto de linhas que escrevemos de, código fonte ou source code (pode ter a terminação “.c”, “.cpp”, e “.cc” - estas extensões dependem do compilador que se utiliza). Esse "source code" é de alguma forma críptica e para alguém que não saiba de c++ no entanto é aquilo que neste momento chamamos de humam readable form.
Para tornar o nosso source code num programa usamos um compilador que irá produzir um "object file". Este ficheiro tem normalmente a extensão. OBJ porém ainda não temos um programa executável. Para isso vamos utilizar o linker. Uma das vantagens do c++ é que usufrui de uma estrutura multi-file. A linguagem permite compilação separada, onde partes do programa total podem estar numa ou mais source files e estes podem ser compilados independentemente de cada um. A ideia é que o processo de compilação produz files que depois podem ser linked together usando um editor de link ou loads que o sistema provem.
Os programas feitos em c++ são tipicamente ficheiros .OBJ ligados uns aos outros com uma ou mais libraries. Estas são uma coleção de linkable files que nós criámos ou que foram fornecidas (vêm com o compilador ou compramos).
Depois de se fazer este linking é que obtemos o arquivo executável. No Windows, ele tem terminação “.exe”. Assim, o sistema operacional reconhece o programa como independente.
Os compiladores atuais incluem também pré-compiladores, (ou pré-processadores) (antes eram software independente, extra), estes pré-compiladores vão fazer alterações ao código fonte, que basicamente consistem em eliminar pedaços de código que escrevemos, e/ou substituir pedaços de código que escrevemos por outro (copy-paste), enfim, é alterar o código fonte por outro código fonte. Depois é que se compila.
* ↑ http://www.dca.fee.unicamp.br/cursos/EA876/apostila/HTML/node150.html O pré-processador C