Minhas soluções para os problemas do curso CS50x.
A etapa dita "compilação" é composta por quatros passos:
- Pré-processamento
- Compilação
- Assemblagem
- Ligação
-
No processo de pré-processamento, o compilador irá processar as diretivas de pré-processamento, como
#include
e#define
. Meio que um "copiar e colar" do conteúdo dos arquivos incluídos no seu próprio arquivo, para que o compilador saiba o que está sendo referenciado, como são definidas as funções e variáveis que você incluiu. -
Na compilção o código é traduzido de C para Assembly, que é uma linguagem de baixo nível, mais próxima do hardware.
-
Na assemblagem, o código em Assembly é traduzido para binário, que é o código de máquina que o processador entende.
-
Por fim, na ligação, o código binário é ligado com as bibliotecas necessárias incluídas no código, como a
cs50.h
, que contém funções que não são nativas do C e talvezstdio.h
, que contém funções de entrada e saída. No final, é gerado um arquivo executável.
Nestes exemplos vamos compilar o araquivo hello.c
e gerar o executável.
make hello
./hello
clang hello.c
./a.out
clang -o hello hello.c
./hello
Para incluir uma biblioteca que que não é nativa do C, é preciso passar a flag -l
com o nome da lib.
Por exemplo, para incluir cs50.h
:
clang -o hello hello.c -lcs50
./hello