Linguagem C: Os 3 Estágios da Compilação

Tempo de leitura: 3 minutos

Hoje teremos mais um daqueles posts em que não falamos diretamente de programação, mas sim dos estágios da compilação de um programa em linguagem C.

Talvez de momento você possa imaginar que isto é desnecessário, já que o compilador faz todo o processo pela gente, mas na realidade, dominar os procedimentos é um passo essencial, e eu vou explicar melhor o porquê:

Tudo é divertido enquanto as coisas dão certo. Concorda?

  • Você escreve seu programa;
  • O GCC compila e gera um arquivo executável;
  • Você executa o arquivo gerado.

Só quem já tentou programar alguma vez na vida sabe que nem sempre isto sai como o esperado.

É comum que no começo a gente sempre pense que o problema está no código em si. Procuramos por horas e horas e o problema, no final das contas, era só alguma opção que faltava passar para o compilador poder fazer a coisa certa.

Existe código que “compila”, mas ainda assim não funciona, exatamente por ter dado algum erro no processo posterior ao da compilação, e que nem sempre é lembrado ou até mesmo conhecido pelo programador.

Por isso que sempre digo que precisamos entender as ferramentas e os processos, e não só a programação em si. Quanto mais você entende do processo, melhor você programa, e quanto melhor você programa, melhor você entende o processo.

É um via de mão dupla, e por isso hoje separei este conteúdo pra você desde já ir se acostumando.

O processo de compilação pode ser dividido em diversos estágios, e é de extrema importância pelo menos entender os 3 principais:

  1. Pré-processamento
  2. Compilação propriamente dita (traduzir código de alto nível em código de baixo nível: saiba mais aqui)
  3. Linking (ou “ligação”, mas pra ser sincero nunca ouvi ninguém falando assim em português)

No vídeo eu mostro o que é o pré-processamento, o que acontece com o seu código por debaixo dos panos depois que ele é processado, e explico a importância do estágio de Linking, que tem tudo a ver com as #include‘s, que já vimos nas aulas sobre bibliotecas.

Se você gostou da ideia de poder incluir bibliotecas escritas por outras pessoas no seu código, então você precisa entender o que é esse tal de Linking.

Algo que esqueci de comentar no vídeo e que é legal de saber: O pré-processador também é responsável por remover todos os comentários do seu código antes de passar para o estágio de compilação. Abordaremos o assunto de comentários um pouco mais para a frente.

E agora que você já conheceu o comando ldd, que tal passar para o ldd outros programas aí do seu computador e ver quais bibliotecas eles estão usando por debaixo dos panos?

Se você caiu aqui “de paraquedas”, clique aqui para assistir/ver os posts na ordem em que foram lançados.

Nota: O pessoal da QtCon me avisou que ainda tem ingressos para os dois dias de palestras (para os treinamentos já se esgotaram). Para o pessoal de São Paulo que tiver interesse em Qt, dê uma olhada no site oficial do evento: br.qtcon.org. Minha palestra falando do Ubuntu Phone a princípio está marcada para o Sábado dia 19 de Agosto de 2017. Apareça lá pra gente bater um papo 🙂

E antes de fechar o post, uma pergunta para você: tá com um tempo livre? Então deixa um comentário aqui em baixo (ou lá no youtube mesmo se preferir).

Um abraço!

  • Luis Cafori

    Fala Tiago!
    Mega aula como sempre.
    Cara, muito, mas muito bom mesmo, saber como funcionam as coisas ficou bem mais “do meu tamanho”, vou voltar para as aulas anteriores porque tenho a impressão que agora vou digerir mais facilmente todo conhecimento que vem transmitindo.
    Valeu mesmo.
    Ainda não terminei o curso de shell script, conteúdo excelente e ótimas aulas, vamos ver se me torno um scripteiro depois de terminar.
    Abraço

    • Fala Luis!
      Opa! Muito obrigado! 🙂
      O começo é sempre um pouco mais complicado, e é normal que a coisa vá se encaixando na nossa cabeça aos poucos. É como um quebra-cabeça em que a cada dia uma peça nova aparece. A imagem só vai ficando mais clara com o tempo. Se tiver qualquer dúvida com relação aos posts anteriores, é só perguntar.
      Legal que está gostando de shell script! Obrigado pelo feedback. Fico feliz que bastante gente que fez o primeiro curso de bash está seguindo em frente nos estudos.
      Abraço!

  • Bruno Andrade

    Teoria é sempre com saber o que funciona por trás das coisas que fazemos, deixa um passo a frente das outras pessoas, e ajuda compreender melhor os problemas quando surgem, muito boa a aula esse comando ldd não conhecia interessante.

    • Falou tudo, Bruno.
      Acho que a ideia é exatamente essa.
      Muito obrigado pelo comentário.

  • Zé Doreto

    Muito obrigado Tiago. Está ajudando muito com meus estudos. Abraço.

    • Opa, valeu Zé!
      Que bom! 🙂
      Fico feliz que continua acompanhando por aqui.
      Abraço!