[email protected]

Entre em Contato

como-compilar-c

Rodando sua Primeira Aplicação C no Windows ou Linux

Programação

Sem dúvida uma das melhores linguagens para se começar a programar é C. Uma linguagem baixo nível, que dá para entender bem todos os conceitos de programação, tipos, etc. Uma linguagem procedural e que é utilizada até hoje em diversos softwares modernos, como o Photoshop, o OpenGL, o AutoCAD, dentre outros

Esta postagem é um complemento ao entendimento bem básico de C e programação.

C é uma linguagem de programação que precisa ser compilada, isto é, ela precisa ser transformada em um conjunto de códigos que a máquina interpretará para, então, criar um executável. Para fazer isso, a linguagem precisa de um compilador, que é um software que faz esse processado.

Obs. C é considerada uma linguagem auto-hospedada, pois com ela é possível criar o próprio compilador. Essa característica também é conhecida como linguagem completa.

Primeiramente, você vai precisar do seu código. Porém, antes de começar, precisamos passar por um pequeno glossário para que não haja confusões acerca de termos:

  • I/O – Denomina-se I/O sistemas que fazem uso intensivo de entrada e saída de dados. I = input, O = output. Dentro da área de computação, a terminação I/O também é usada muito para expressar tecnologias novas de implementação.
  • Editor de Texto – Na área de desenvolvimento é chamado de editor de texto qualquer programa onde você possa programar um código. Geralmente, editores de texto possuem auto-complete, que são dicas que ajudam a programar. Como exemplos temos o Notepad++, o Brackets, o Atom, etc.
  • IDE – Ambiente de Desenvolvimento Integrado. Trata-se de uma ferramenta para desenvolvimento mais ampla do que um editor de texto. Além de inserir um contexto de projeto e não só de arquivos de texto editáveis, a IDE cuida da comunicação interna entre os elementos do código. Ou seja, é um ambiente completo para o desenvolvimento. Como exemplos temos o Eclipse, o JetBrains, o Visual Studio, o Coda, etc.
  • Compilador – O compilador é um programa que transforma o seu código em algo que possa ser interpretado pela máquina. Os microcontroladores compreendem apenas bytecodes, ou outras linguagens de baixo nível indicadas em seus firmwares, de modo que se faz necessário converter o seu código para algo que a máquina entenda.
  • Variável – Trata-se de um lugar que você reserva em sua memória para poder armazenar um dado, como um número, um caractere, etc.
  • Função – É simplesmente um trecho de código com o propósito de executar um procedimento e, geralmente, retornar uma informação.

Outros termos poderemos ver em artigos futuros.

Para quem ainda está começando com programação, vamos deixar aqui abaixo um código, onde cada ponto de explicação está incluído como comentário.

#include <stdio.h>
// ^ Isto é uma diretiva. Ela serve para poder importar uma biblioteca externa
// (no caso, uma nativa do C conhecida como Standard I/O).
// As importações de bibliotecas devem ser a primeira coisa a ser declarada.
// O # simboliza que isso acontecerá antes de qualquer coisa ser executada pelo programa.

// Isto é um comentário. Você pode colocar duas barras
// no meio de um código e o compilador irá pular essa linha ou trecho
/* Você também pode usar /*, caso você queira
fazer um comentário com mais de uma linha.
Todavia, você precisa fechar com */

/**
 * Toda a aplicação em C deve ter uma função main() (principal).
 * Você deve ter reparado que este comentário está com uma cor diferente.
 * Convencionou-se que os comentários, antes de funções, devem ser feitos
 * com /** (Isso se chama Comentário de Cabeçalho). Isso indica a IDE que este
 * comentário descreve para quê serve
 * esta função. Isso acaba sendo incorporado a documentação do projeto
 * ou a dica de código mostrado por uma IDE. Você ainda pode usar
 * alguns parâmetros para indicar.
 * Colocar comentários, como este, não é obrigatório, mas faz parte de boas práticas,
 * pois você precisa lembrar o que esta função faz (e certamente, no futuro, você esquecerá),
 * ou indicar a um colega, como usar a função.
 * Por exemplo, esta função (também chamada de método), retorna um inteiro.
 * Logo, eu posso digitar:
 * RETURN :
 *            Type:   int   Resulta zero
 * Isso indicará a IDE e a documentação que a função retornará um inteiro.
 * Essa indicação de comentário de cabeçalho pode variar entre IDEs e linguagens.
 * */
int main() //A primeira palavra indica o que a função retorna, ou seja, a função,
// deve retornar um inteiro. Em seguida, coloca-se o nome da função, seguido de ().
{//Inicia a função (também conhecido como begin)

    int aInt = calcular(88,32); // uma variável do tipo inteiro
                                //(o nome aInt fui eu quem dei), que vai ser preenchido com o
                                //retorno da função calcular (veja abaixo)
    
    char str[15]; //uma variável do tipo caractere que eu chamei de str.
                  //O [15] significa que ela poderá ter até 15 caracteres.
                  //Vocês ainda vão entender o conceito de vetores.
    
    sprintf (str, "%d", aInt); //sprintf é uma função nativa do C que serve
                               //para transformar inteiros em caracteres,
                               //pois só posso imprimir caracteres no console (ou no dispositivo de saída).
    
    str[15] = strcat(str,"\n");//strcat é uma função nativa do C que serve para concatenar.
                               //Ou seja, juntar uma String (conjunto de caracteres) com outra.
                               //A String (que significa amarra em tradução livre, ou seja, uma amarra de caracteres)
                               //"\n" é um modo de dizer ao compilador que ele deve colocar uma quebra de linha
                               // Usar \n é algo padronizado como quebra de linha em qualquer tipo de texto plano.
                               // Lembrando que quebra de linha seria o equivalente a dar um CTRL+ENTER, em um texto comum.
    printf(str); //printf é uma função nativa do C que serve para mostrar (imprimir)
                 //algo no dispositivo de saída, no caso, no console abaixo.

    return 0; //O retorno da função.
              //Como a função diz que retorna um inteiro (lá no começo da função),
              //ela DEVE retornar um inteiro.
              //Caso você não retorne o inteiro, ela NÃO irá compilar, pois você prometeu que ela retornaria isso.
}//Finaliza a função (também conhecido como end)

/**
 * Você vai notar que esta função que eu criei, tem uma peculiaridade.
 * Repare que dentro dos parênteses há duas variáveis inteiras.
 * Essas variáveis se chamam parâmetros. Elas servem para que a função possa ser reaproveitada
 * a partir de outros termos que serão chamados acima.
 * Repare, em main(), que eu chamo calcular(88,32), mas você pode mudar para qualquer outro número inteiro.
 * O que o método (ou função), fará é calcular os dois valores que você colocar nos parâmetros.
 * No caso de C, se você não colocar os dois valores, ao chamar a função, o compilador falhará.
 * 
 * * INPUTS :
 *       PARAMETERS:
 *           int     valor                Primeiro somando
 *           int     valor2               Segundo somando
 */
int calcular(int valor, int valor2)
{
    int total = valor + valor2; //uma variável inteiro, chamada total, que retorna a soma dos parâmetros valor e valor 2;
    return total; //O retorno do método será um inteiro (como foi descrito no começo do mesmo).
    //Em main(), você pode ver que o retorno deste método retorna uma variável. 
}

Você pode simplesmente copiar e colar o código acima em um editor de texto qualquer (como os citados acima). Você pode usar até mesmo o bloco de notas do Windows, ou o Gedit, no Linux. Em, seguida, salve o arquivo com o nome que você quiser, porém, com a extensão .c, por exemplo: meucodigo.c.

Compilando C, no Windows

Para poder compilar em C, no Windows, usaremos uma ferramenta de código aberto chamada MinGW (caso deseje testar, pode usar a versão 64 bits do MinGW, porém a versão 32 é compatível com ambos os sistemas). Ao instalar você pode escolher algumas especificações e se quer ou não que ela opere em modo visual (em janela), além da integração com o Explorer.

Uma vez instalado o MinGW, você precisará selecionar o mingw32-base e mingw32-gcc-g++, pois ele é o compilador C / C++ para podermos trabalhar. Depois disso, basta ir no menu Installation e clicar em Apply Changes e, em seguida, no botão Apply. Ele irá instalar todos os arquivos do compilador que serão necessários para nosso teste.

Após concluída a instalação, já podemos usar o compilador.

Para poder compilar o seu arquivo, simplesmente abra o prompt de comando (cmd.exe), do Windows e vá na pasta do MinGW, localizada geralmente em C:\ (ou onde você preferiu instalar). Na dúvida basta digitar o código abaixo:

cd C:\MinGW\bin

Em seguida, vamos chamar o compilador e o arquivo que queremos que ele compile. Para isso, basta digitar o nome do compilador, o arquivo a ser compilado, o parâmetro do comando, e o nome final do programa.

No caso, teremos:

gcc meucodigo.c -o meuprograma.exe

Onde gcc é o processo (o compilador), meucodigo.c é o código fonte, o parâmetro -o significa que eu estou indicando qual é a saída e o meuprograma.exe indica o nome final do programa compilado.

No meu caso, como criei meu código fonte e o salvei dentro de Documentos, eu coloquei:

gcc C:\Users\rodri\Documents\meucodigo.c -o C:\Users\rodri\Documents\meuprograma.exe

Como é um pouco chato lembrar e até digitar todo o caminho, uma dica é arrastar o arquivo para dentro do prompt de comando, isso fará com que ele cole o caminho do arquivo.

Devido a quantidade enorme de comentários e observações no código, é bem provável que ele retorne alguns Warnings (alertas), ao compilar, mas não dará erro. Você poderá testar o resultado do seu programa simplesmente digitando o nome do executável no prompt de comando.

Compilando C, no Linux

Para compilar C, no Linux, é ainda mais simples do que no Windows. Dependendo da distribuição do Linux que você utilizar é possível até que já haja um compilador instalado. Vamos utilizar, no exemplo, a compilação de C em uma distribuição Debian, como o Ubuntu ou CentOS, por se tratar de distribuições muito usadas.

Abra o terminal do Linux e digite:

sudo apt-get update

Para quem é novo no Linux, o sudo é um comando que afirma que você vai executar como super usuário, ou seja, com acesso completo ao sistema operacional, e, por isso, ele deverá te pedir a senha. Já o apt-get update serve para atualizar o repositório (fonte de sistemas), de sua distribuição Linux.

Em seguida, basta digitar o comando:

sudo apt-get install build-essential

Esse comando serve para pedir para que seja instalado os elementos principais para compilação de diversas linguagens usadas pelo Linux, inclusive C, assim como todas os seus pacotes de dependências (bibliotecas necessárias para o funcionamento).

Agora vá até a pasta onde você salvou o arquivo do código, no meu caso está em /mnt/c/Users/rodri/Documents/.

Para compilar basta colocarmos:

gcc meucodigo.c -o meuprograma.out

Onde gcc é o processo (o compilador), meucodigo.c é o código fonte, o parâmetro -o significa que eu estou indicando qual é a saída e o meuprograma.exe indica o nome final do programa compilado.

Já para executarmos o programa, dentro do terminal, digitaremos:

./meuprograma.out

… e voilà

Concluindo

C é uma linguagem muito boa para quem está começando a programar ou está ainda entrando no mundo da tecnologia. Compilar por linha de comando te ajuda a ter uma base ainda melhor para compreender como funciona a compilação de uma linguagem e te dá mais liberdade para usar qualquer compilador, IDE ou editor de texto que você prefira e se adapte.

Para dar o exemplo no Ubuntu foi usado o Bash do Ubuntu disponível para Windows 10, todavia vai funcionar sem problemas em qualquer distribuição Linux, baseada em Debian, seja em máquina virtual ou em instalação normal. Se você quer saber como instalar o Bash do Ubuntu no Windows 10, acesse nosso artigo a respeito.

Rodrigo Portillo

@portillodesign

Gosto tanto de design que aprendi programação e regras para garantir a estabilidade de meus projetos. Trabalho e trabalhei com desenvolvimento full-stack em diversas linguagens, como Flex, PHP, Java, Javascript, dentre outras. Ainda trabalhei alguns anos como designer gráfico e ilustrador.
Busque mais informaçoes pelo LinkedIn.