0% acharam este documento útil (0 voto)
25 visualizações7 páginas

Minitutorial Compilando e Rodando Programas C No GNU-Linux

Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
25 visualizações7 páginas

Minitutorial Compilando e Rodando Programas C No GNU-Linux

Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

1

Compilando e rodando programas “C” no GNU/Linux1


por Gills Vilar Lopes (gills@[Link])
Versão 1.5 (01.04.2015)

1 Introdução
A primeira versão deste trabalho foi originalmente disponibilizada em 2012 e tinha como objetivo
principal ser um guia rápido (Quick-Start Guide) aos graduandos recém-ingressos no CSTRC-IFPB2 que
queriam rodar, no sistema operacional (SO) GNU/Linux, programas desenvolvidos na linguagem C.
Todavia, foi só compartilhá-lo na Internet, e ele começou a ser rapidamente acessado não só de dentro
do Brasil, mas também alhures. Portanto, o presente minitutorial é direcionado a você, jovem ledor, como
uma alternativa para compilar, rodar e testar seus próprios programas C no SO do Tux.
Antemão, devo frisar que, por questões ideológicas, deixei de usar o Ubuntu, mas como essa
distribuição/distro continua sendo a mais utilizada e difundida no mundo geek, resolvi manter as capturas
de telas (screenshots) originais. Registro também que a versão utilizada aqui é a 12.04.1 LTS do Ubuntu3.
Para a escritura do código-fonte, o programa escolhido é o jEdit4, tendo em vista que é o mais
próximo ao Dev-C++5 utilizado nas aulas práticas da disciplina de Algoritmos e Programação
Estruturada que encontrei – aos quem não ligam para a interface gráfica, podem usar o Vi6 mesmo. Para
compilar os programas, utiliza-se o GCC, compilador criado pelo Richard Stallman e nativo na maioria
das distros GNU/Linux7, o qual é rodado a partir do Terminal com root (root -s).
Vale frisar que este material não busca ensinar a programar em C; para tal, há várias apostilas –
um excelente exemplo é a da Universidade Federal de Minas Gerais (UFMG), desenvolvida pelo prof.

1
Atribuí a este trabalho a licença Creative Commons - Atribuição - CompartilhaIgual 3.0 Não Adaptada.
2
Curso Superior em Tecnologia em Redes de Computadores do Instituto Federal de Educação, Ciência e Tecnologia da
Paraíba, cujo sítio virtual (site) oficial pode ser acessado aqui: [Link]
superiores-de-tecnologia/redes-de-computadores.
3
A versão estável mais recente do Ubuntu, no momento em que reviso este minitutorial, é a 14.04.2 LTS e pode ser baixada
aqui: [Link]
4
Baixe-o gratuitamente aqui: [Link]
5
Esse programinha versátil só roda no Windows e é – ou, pelo menos, era, na minha época – um dos mais conhecidos entre
os neófitos recém-chegados à Graduação que nunca utilizaram um GNU/Linux. Download aqui:
[Link]
6
Saiba mais sobre o Vi: [Link]
7
Se sua distro não vier nativamente com o GCC, baixe-o aqui: [Link]
2

Renato Cardoso Mesquita – e videoaulas disponíveis na Internet. Isso tudo sem deixar de mencionar o
clássico livro “C Completo e Total”, de Herbert Schildt8.

2 Observações iniciais
Antes de você pôr as mãos no código, algumas observações preliminares precisam ser feitas:
• A questão do caminho longo no GNU/Linux: originalmente, meus arquivos-fonte estavam no
diretório /home/gills/Documents/academico/graduacao/ifpb/periodos/1/algoritmos-
e-programacao-estruturada. A priori, não há problema nenhum nisso, mas, a posteriori, na
hora de compilar, a tela do terminal ficará bem poluída, dificultando assim a leitura dos erros, por
exemplo. Por isso, aloquei os arquivos testados aqui no diretório /home/gills/uia ou
simplesmente ~/uia.
• Mostrando o número da linha no jEdit: geralmente, compiladores e editores exibem onde
exatamente seu programa está “bugando”, isto é, informam em qual linha – e, às vezes, em qual
coluna – do código-fonte o erro está. Portanto, para exibir o número das linhas no jEdit, siga os
seguintes passos: menu VIEW > TOGGLE LINE NUMBERS (ou Ctrl+C+Ctrl+T).
• A questão problemática da biblioteca conio.h com o comando getch(): uma das possibilidades
que se aprende quando se quer terminar a execução de um programa e fechá-lo automaticamente
é teclar Enter; para que isso ocorra, utiliza-se o comando getch() como o último dos comandos
a ser executado. Só que tudo isso é utilizando o Dev-C++, no Windows. Já no GNU/Linux é
diferente. Quer ver? Eis a saída do GCC quando se utiliza tal comando: “undefined reference to
'getch'”. E fica ainda pior: quando a biblioteca conio.h é chamada e associada ao comando
getch(), eis o erro reportado: “fatal error: conio.h: No such file or directory”. Há duas
possibilidades de se contornar tais problemas: a primeira delas é criar uma função para fazer
exatamente aquilo que o getch() faz9; a outra é utilizar o comando return 0 como último
comando do código-fonte. Por questões de praticidade, utiliza-se a segunda opção, neste
minitutorial.

8
Apesar de não ser mais publicado, o livro pode ser encontrado em em sítios de livros usados e até mesmo na própria Web.
9
Correção do bug extraída de: SILVA, Erisson. Substituindo a biblioteca conio.h no Linux usando ncurses curses.h.
Disponível em: <[Link]
curses.h>. Acesso em: 31 mar. 2015.
3

• Outras observações:
◦ Por questões obscuras, o GCC apresenta erro de compilação quando a primeira linha do
arquivo-fonte começa com um comentário de uma linha simples (iniciada por //). Para
contornar isso, troque o comentário de linhas simples pelo de linhas múltiplas (/* */), mesmo
que a parte a ser suprimida tenha apenas uma linha.
◦ Em caso de estar rodando o programa no Terminal e querer interromper sua execução, dê o
comando Ctrl + C (sem teclar [Enter]). Na tela, serão impressos os caracteres “^C”,
conforme a Figura 1.

Figura 1 – Interrompendo execução do programa com o teclado

3 Exibindo “Olá, mundo!”


Agora, aqui vão os passos necessários para testar se o GCC estava rodando corretamente::
1. Criar o código-fonte conforme a Figura 2 e salvá-lo com o nome de “ola.c” – atenção: se
não colocar o “.c” não vai funcionar:

Figura 2 – Tela inicial do programa “ola.c”


4

2. Ir no Terminal, navegar (comando cd) até o diretório-raiz do arquivo-fonte e dar o


comando gcc ola.c -o ola; feito isso, teclar [Enter]. O segundo “ola” que aparece no
comando é o nome do arquivo que conterá o programa executável – poderia ser qualquer
outro nome, mas, por questões práticas e pedagógicas, manteve-se a mesma nomenclatura
do arquivo que contém o código-fonte. Perceba que o arquivo executável não contém
extensão. Se tiver algum erro, o mesmo será impresso na tela; se tudo tiver dado certo,
não aparecerá nada na tela, como mostrado na Figura 3.

Figura 3 – Comando para compilar bem-sucedido

3. Para confirmar se realmente o programa foi compilado, navegue (pelo Terminal ou,
graficamente, com o Nautilus, por exemplo) até o diretório-raiz do arquivo-fonte e
perceba que foi criado o arquivo executável ola, com permissões diferentes (-rwxrwxr-
x) das do ola.c. É o que mostra a Figura 4.

Figura 4 – Comando para compilar bem-sucedido

4. Para executar o programa, digite ./ola e tecle [Enter]. A saída do programa será
mostrada no próprio Terminal, conforme a Figura 5:
5

Figura 5 – Execução bem-sucedida do programa

4 Erro(s) no código­fonte: analisando a invalidação


Abaixo, vão algumas dicas e informações úteis para analisar e corrigir certos erros que
invalidam o código-fonte.

1. A Figura 6 mostra código em C contendo um erro. Perceba que há uma \ a mais na quinta linha,
e que o número dessa linha está em destaque rosa no jEdit:

Figura 6 – jEdit apontando um erro no código-fonte

2. Na hora de compilar, o GCC pode apresentar um erro com o nome da função (no caso, a função
main) e do local exato em que tal erro ocorre. Isso tudo é feito no seguinte esquema: nome do
arquivo-fonte; dois pontos; número da linha contendo erro; dois pontos; e número da coluna –
cada caractere é considerado uma coluna, aqui – da linha que contém erro (s), conforme a Figura
7.

Figura 7 – Impressão de erro diretamente no Terminal


6

• No exemplo da Figura 7, apresenta-se uma informação de que há quatro erros, nos


seguintes locais do código-fonte:
1. 5ª linha e 9ª coluna;
2. 5ª linha e 2ª coluna;
3. 7ª linha e 2ª coluna; e
4. 9ª linha e 1ª coluna.
• Porém, o primeiro erro – 5:9 – é o responsável por propagar o caos (efeito dominó ou
cascata) para as demais linhas do código.
• Portanto, a nona coluna10 da quinta linha corresponde justamente às primeiras aspas
duplas ('') do printf. O GCC está esperando por uma segunda aspas duplas, mas o
elemento de escape \ faz com que as últimas aspas duplas não sejam lidas.
• Sabendo onde ocorre exatamente o erro, é possível identificá-lo e corrigi-lo, conforme é
mostrado na a Figura 8.

Figura 8 – Corrigindo erro no código-fonte

Log das versões


• 1.5 (1 abr. 2015):
◦ Adição de pequenos textos.
◦ Revisão ortográfica.

10
Sabendo-se que a primeira coluna corresponde ao espaço “identado”.
7

• 1.4 (31 mar. 2015):


◦ Adição de pequenos textos.
◦ Aplicação da fonte Courier nos comandos e códigos-fontes.
◦ Checagem dos links.
◦ Inclusão de legendas nas imagens.
◦ Inclusão de bordas nas imagens para melhorar a visualização na hora de imprimir.
◦ Revisão ortográfica.

• 1.3 (14 out. 2013):


◦ Revisão ortográfica.

• 1.2 (14 out. 2012):


◦ Revisão ortográfica.
◦ Inclusão da subseção “Outras observações”.
◦ Inclusão da seção “Erro(s) no código-fonte (analisando a invalidação)”.
◦ Inclusão da seção “Logs de atualização de versões”.

Você também pode gostar