Pular para o conteúdo

Compilando programas em C

Neste capítulo, vamos aprender a compilar e executar programas com um único arquivo e projetos na linguagem C.

No terminal, abra a pasta dev que criamos anteriormente para guardar nossos projetos.

Fedora, WSL ou Mint
mkdir -p ~/dev
cd ~/dev

Dentro dela, crie um diretório chamado c_cpp_projects e navegue para dentro dele.

Fedora, WSL ou Mint
mkdir -p c_cpp_projects
cd c_cpp_projects

Crie um outro diretório chamado `hello_world e também navegue para dentro nele.

Fedora, WSL ou Mint
mkdir -p hello_world
cd hello_world

Crie um arquivo chamado hello_world.c.

Fedora, WSL ou Mint
touch hello_world.c

Abra o Visual Studio Code neste diretório.

Fedora, WSL ou Mint
code .

Copie o seguinte código para o arquivo hello_world.c. Lembre-se de salvar o arquivo.

hello_world/hello_world.c
#include <stdio.h>
int main() {
printf("Hello, world!\nThis is my first code in C.\n");
return 0;
}

Vamos utilizar o Clang para compilar o código. O comando de compilação do Clang tem a seguinte estrutura:

Fedora, WSL ou Mint
clang [opções] <arquivo>.c -include -o <executável>
  • [opções] são os argumentos de compilação, como:

    • -o <arquivo> para especificar o arquivo de saída;
    • -include para incluir um arquivo de cabeçalho;
    • -g para incluir informações de debug;
    • entre outras.
  • <arquivo>.c é o nome do arquivo que será compilado.

  • <executável> é o nome do arquivo executável de saída.

Assim, com o terminal aberto na pasta ~/dev/c_cpp_projects/hello_world, execute:

Fedora, WSL ou Mint
clang hello_world.c -o hello_world

Se tudo ocorrer bem, um arquivo executável será criado. Ele se chamará apenas hello_world. Diferentemente do Windows, em que o executável tem a extensão .exe, no Linux não é necessário adicionar nenhuma extensão ao arquivo executável.

Terminal exibindo três comandos executados. O primeiro é "ls" e mostra o arquivo "hello_world.c" dentro da pasta "hello_world". O segundo é o de compilação, que não retorna nenhum texto. O terceiro é "ls" novamente, que agora mostra os arquivos "hello_world.c" e "hello_world".
Compilação do arquivo "hello_world.c".

Para executar o programa, basta chamar o arquivo executável.

Fedora, WSL ou Mint
./hello_world
Terminal exibindo o comando "./hello_world" e a saída do programa, que é "Hello, world! This is my first code in C.".
Execução do programa "hello_world".

Retorne para a pasta c_cpp_projects.

Fedora, WSL ou Mint
cd ~/dev/c_cpp_projects

Crie um novo diretório chamado separate_function e navegue para dentro dele.

Fedora, WSL ou Mint
mkdir -p separate_function
cd separate_function

Crie um arquivo chamado main.c. Então abra o Visual Studio Code no diretório atual.

Fedora, WSL ou Mint
touch main.c
code .

Copie o seguinte código para o arquivo main.c.

separate_function/main.c
#include <stdio.h>
int sum(int a, int b);
int main() {
int a = 5, b = 7;
int result = sum(a, b);
printf("The sum of %d and %d is %d.\n", a, b, result);
return 0;
}

Crie um outro arquivo chamado functions.c e cole nele o código a seguir.

separate_function/functions.c
int sum(int a, int b) { return a + b; }

A função principal main chama a função sum, que está definida em outro arquivo. Então, para fazer a compilação, precisamos passar os dois arquivos para o compilador. Internamente, o compilador fará a compilação de cada arquivo separadamente e, em seguida, fará a ligação entre eles.

Para compilar o projeto, execute o comando abaixo no terminal. Definimos os arquivos de entrada main.c e functions.c. Então, usamos a opção -o para especificar o nome do arquivo de saída, que será um executável.

Fedora, WSL ou Mint
clang main.c functions.c -o separate_function
./separate_function
Terminal exibindo quatro comandos executados. O primeiro é "ls" e mostra os arquivos "functions.c" e "main.c" dentro da pasta "separate_function". O segundo é o de compilação, que não retorna nenhum texto. O terceiro é "ls" novamente, que agora mostra os arquivos "functions.c", "main.c" e "separate_function". O quarto é a execução do programa, que retorna "The sum of 5 and 7 is 12.".
Compilação do projeto "separate_function".

Podemos usar o Git para versionar nossos projetos. Para isso, precisamos inicializar o repositório Git no diretório do projeto. Faça isso com o comando abaixo.

Fedora, WSL ou Mint
git init

É interessante também criar um arquivo chamado .gitignore para que arquivos privados ou desnecessários não sejam enviados para o repositório. Um desses arquivos é o executável que acabamos de criar.

Crie o arquivo .gitignore e adicione o nome do executável separate_function dentro dele.

Fedora, WSL ou Mint
echo "separate_function" >> .gitignore

Então, precisamos adicionar os arquivos ao repositório, o que comumente é chamado de staging. O comando abaixo adiciona todos os arquivos do diretório atual, exceto aqueles que estão listados no arquivo .gitignore.

Fedora, WSL ou Mint
git add .

Podemos verificar quais arquivos foram adicionados com o comando abaixo.

Fedora, WSL ou Mint
git status
# On branch main
# No commits yet
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
# new file: .clang-format
# new file: .clang-tidy
# new file: .gitignore
# new file: functions.c
# new file: main.c

Por fim, faremos o commit dos arquivos com a mensagem Initialize project. Para definir a mensagem, usamos a opção -m seguida do texto entre aspas.

Fedora, WSL ou Mint
git commit -m "Initialize project"

Podemos verificar o histórico de commits com o comando abaixo.

Fedora, WSL ou Mint
git log
# commit 45b6e7e35917c5ccace23370cae78f0bbf61d3b2 (HEAD -> main)
# Author: Gabriel Malosto <gabriel@email.com>
# Date: Mon Apr 28 00:51:26 2025 -0300
# Initialize project
# (END)

O log abre um ambiente de leitura, em que podemos navegar pelas mensagens de commit. Para sair dele, pressione q q .