Senhoras e senhores, este é um artigo voltado para iniciantes sobre uma das partes mais fascinantes da computação… sem mais delongas eu apresento-lhes: o compilador. Aquele sujeito bacana que eu já citei algumas vezes. Este post é uma breve e amigável introdução ao conceito de um compilador, além de um leve encontro com um dos que entendem a linguagem C, o famoso GCC: GNU C Compiler .

O que é um compilador afinal?

Esta pergunta exige a resposta de outra coisa primeiro… como é expresso um programa de computador? Para ser bem simplista ele é apenas uma sequência de números. O que estes números tem de especial é que quando lidos pelo seu processador eles serão interpretados como comandos para o computador. Acontece que estes comandos são coisas bem pequenas e específicas como:

ponha o valor 300 no endereço de memória 9000 
some o valor presente no endereço de memória 9000 com 200
guarde este último valor no endereço de memória 9001
vá executar a instrução no endereço de memória 6000

Naturalmente elas não são escritas assim, geralmente é algo como isto (chamado de linguagem de montagem ou Assembly):

LOAD 9000, #300
ADD 9000, #200
STORE 9001
JUMP 6000

E como números poderia ser algo assim (imagine que são um monte de bytes em sequência):

0 9000 300 5 9000 200 3 9001 10 6000

ATENÇÃO Os exemplos de código Assembly, bem como os números usados para os comandos não refletem o que o seu computador usa de verdade. São só pequenos exemplos para você pegar a idéia.

Na realidade é o contrário, embora tenha dias que eu não acredite nisso.

Sabendo disso, notem que, para todos os fins práticos um computador pode ser entendido como um cara muito burro. Um cara tão burro que só consegue fazer coisas muito simples. A vantagem de um computador então, sobre um cérebro humano que entende e consegue processar coisas como: “Vai ali atrás do treco e me traz o bagulhoso” é que o primeiro é bilhares de vezes mais rápido. Compondo um bocado destas pequenas instruções o nosso amiguinho é capaz de fazer o que estávamos pedindo nos programas que escrevemos nas aulas passadas. Compondo milhões delas ele é capaz de rodar o seu navegador de internet ou os seus joguinhos divertidos. Legal hein?

OK, mas o que é um compilador?

Um resumão de compiladores

Bom, agora você entende um pouco (infelizmente um pourquinho só :) do que se passa dentro do processador do seu computador vamos avançar. Os mais espertinhos talvez tenham percebido é que é extremamente complicado e chato ficar dando todas estas ordens “minuciosas”. De fato. Pra nossa sorte um pessoal aí de 1950 ficou com vontade de fazer computações mais interessantes e começaram a pensar que deveria ser possível escrever programas de uma maneira mais inteligente.

Na época, foram criadas as primeiras linguagens de programação e os seus primeiros compiladores, os programas que fariam a tradução dos comandos textuais e um pouco mais amigáveis para as desagradavelmente burras instruções de máquina. Geralmente essas linguagens são ditas como sendo de alto nível (de abstração), por podermos ignorar vários detalhes massantes e concentrar nossos cérebros na solução do problema que temos à mão.

gcc

Pule para o fim se precisar instalá-lo

Dito isto, vamos para o grosso do assunto, um compilador da linguagem C. O gcc é um programa usado na linha de comando (o que muda um pouco as coisas no Windows, veja a seção de instalação para mais informações) e ele simplesmente engole o texto do seu programa de um lado e cospe um arquivo executável do outro.

gcc hello.c -o hello.exe

O comando acima faz exatamente isto. Para testar se funciona salve este arquivo na pasta que você está do terminal e chame-o de hello.c . Se tudo der certo o seu arquivo executável estará pronto para ser rodado, digite:

hello.exe

Claro que este programa estava bem escrito, pode ocorrer, como você talvez já tenha se deparado de alguns erros de compilação aparecerem. Não é o fim do mundo, ele vai avisar para você qual linha (ou linhas) infringiu alguma regra e você vai lá e corrige. Eu ia incluir mais opções do programa aqui, mas o artigo está ficando grande demais. Sugiro que você RTFM e também tente usar o gcc, pois é o único jeito de se familiarizar com o funcionamento das coisas.

Perguntas oportunas

Por vezes o compilador pode demorar. Eu só queria mostrar essa figura em algum lugar :)

 

Por que regras tão complicadas na hora de escrever?

Como eu já falei anteriormente, o computador é um cara bem burro, logo se você quer mandar nele é melhor não vir com ambiguidades, é preciso ter certeza de que ele fará o que estamos mandando. Reflexo desta necessidade é a existência de regras rígidas de gramática para a linguagem C e várias outras.

Por que o compilador não corrige os erros sozinho?

Parece tudo muito bonito em teoria, mas imagine aqui por um segundo quantas vezes você estava digitando um texto com correção automática e ele te sugeriu a palavra errada. Não é malícia do computador, ele simplesmente não tem dados o suficiente para deduzir exatamente o que você queria dizer, então ele não é o cara mais recomendado para corrigir os TEUS erros. Alias, se ele pudesse escrever programas tão bem quanto você ele o faria (e estaríamos ferrados :). Mesmo sendo assim é preciso notar que o compilador geralmente dá dicas ótimas sobre o que está errado, é só aprender a entedê-lo.

Instalando o gcc

Linux

  • Numa distribuição Debian (leia-se Ubuntu) tente instalar o pacote build-essential
  • Entretanto já deve estar instalado e se você está usando Linux provavelmente não precisava ler isto aqui.

Windows

  • Este passo é mais chatinho aqui porque geralmente o Windows não incentiva o uso da linha de comando (e você nem quer ficar muito do prompt do DOS mesmo, é terrível). Na realidade o compilador ainda está presente, mas é usado escondido pelos programinhas que você usa para programar (DevC++, CodeBlocks, …). Caso não esteja afim, apenas esqueça esse papo todo de linha de comando e use o seu ambiente de desenvolvimento.
  • Existem dois projetos chamados MinGW e MSys que visam implementar de maneira minimalista algumas funcionalidades dos sistemas GNU/Linux no Windows, entre elas o gcc. Caso você queira experimentar uma linha de comando de verdade tente esta instalação.
  • Mesmo que você ache que nunca usará o gcc porque ele já está integrado no seu ambiente de desenvolvimento dê uma lida sobre ele, você talvez precisa editar algumas opções direta ou indiretamente para fazer suas compilações. Vale lembrar também que é possível que você use outros compiladores se por exemplo programar no Visual Studio.

Você provavelmente curtirá: