.Editar, compilar, testar |
Editar |
Os editores modernos são capazes de reconhecer a síntaxe das linguagens de programação e mostram varios elementos com cores diferentes (palavras reservadas, cadeias de caracteres, comentários etc...). Este processo é chamado «syntax highlighting».
O programa é escrito num ficheiro de texto com um programa chamado genericamente «editor». Este tipo de programa não deve ser confundido com um programa de processamento de texto como o Word ou o Open Office. Um programa de processamento de texto acrescenta ao ficheiro indicações acerca da formatação (tamanho dos caracteres, tipo de letras etc ...), é adaptado à escrita de relatórios ou cartas mas não é adaptado à escrita de programas. Um editor guarda no ficheiro apenas a informação visível no ecrã ou seja o texto. Muitos editores têm a capacidade reconhecer a sintaxe da linguagem de programação usada e apresentam o programa com cores o que facilita a leitura.O editor é a ferramenta de base do programador. Existem muitas opções conforme o sistema operativo que está a usar (Windows, MacOS ou Linux) e a linguagem de programação. Por exemplo, o Eclipse é um ambiente de programação concebido para o Java; permite a edição, compilação e o teste de programas Java. O Gedit (em Linux) é um editor simples que reconhece a síntaxe das principais linguagens de programação mostrando vários elementos sintacticos com cores. No entanto, não ajuda o utilisador para a apresentação do programa. A escolha de um editor é uma questão de gosto pessoal dado que as caracteristicas de algumas podem agradar a uns e não a outros. A minha preferência vai para Emacs, um editor que funciona em várias plataformas (Windows, Linux, MacOS, ...) e que tem a como caracteristica principal de ser extremamente flexivel. É chamado no manual «the extensible, customizable, self-documenting real-time display editor». É de facto um editor programável, o que não significa que tem que o programar, mas antes que numerosos pacotes de software foram escritos para o adaptar às situações as mais variadas.
Vamos ver nas secções seguintes como editar um programa usando o Emacs.
Se estiver a usar o Ubuntu Linux, o Emacs (quando é instalado) encontra-se no menu Applications > Programming. Se tudo correr bem aparece uma nova janela que mostra a página de rosto do emacs :
O primeiro passo consiste em criar um ficheiro onde será escrito o programa selecionando a opção do menu File > Visit New File...:
hello.c):
.c.Agora pode escrever o programa :
\n) foram omitidas. Como pode ver, as aspas que não foram fechadas (a seguir ao printf) aparecem en vermelho e os caracteres até o fim do programa têm a cor das cadeias de caracteres. A barra cinzenta, em baixo da janela do Emacs contém informações úteis. Os dois asteriscos (**) que aparecem antes de hello.c indicam que as alterações ainda não foram guardadas no disco. Para gravar as alterações pode usar o menu File > Save
Compilar e executar |
Para compilar o programa há duas opções :
Já vimos um exemplo de compilação usando a linha de comando aqui. Os comandos estão escritos num terminal como vimos na secção sobre o printf. O comando para compilar um programa C é gcc. Juntamente a este comando temos que indicar o nome do ficheiro a compilar bem como o nome do programa executável :
-o indica o ficheiro de saida (output). Se o compilador não detecta nenhum erro não escreve nada no terminal. Pode então excutar o seu programa :O gcc aceita numerosas opções na linha de comando. Está foram do ambito desta secção explorar as opções do gcc, vamos apenas realçar as mais uteis no nosso contexto.
-Wall é uma opção que manda o gcc apresentar todas as mensagens de aviso causados por suspeitas de código incorrecto. As situações onde são geradas mensagens de aviso não impedem a compilação do programa mas correspondem a situações que podem dar problemas durante a execução do programa.-ansi é uma opção que determina que o programa a compilar deve seguir a norma ANSI do C. É importante o programa cumprir todos os requizitos da norma de forma a garantir que poderá ser compilado por outro compilador (e não apenas pelo gcc).-Wall -ansi.
O que é que aconteceu ao seu programa ? Continua lá, disponível. Para o voltar a vê-lo novamente deve usar o comando C-x b (o que significa : carregar na tecla Ctrl e simultaneamente na tecla x, tirar os dedos do teclado e carregar no b), aparece :
O buffer é a memória do computador que contém o seu ficheiro enquanto está a usar o emacs. O emacs é capaz gerir simultaneamente vários buffers, ou seja: pode editar vários ficheiros ao mesmo tempo.
Se repetir o comando C-x b o emacs propõe trocar novamente o buffer, desta vez o valor por defeito é o buffer que contém o shell. Não é muito conveniente ter que trocar o buffer cada vez que quer alterar ou compilar o programa. Pode alargar a janela e a dividir ao meio de forma a poder ver ambos os buffers. O primeiro passo consiste em usar o comando C-x 2 (o que significa : carregar na tecla Ctrl e simultaneamente na tecla x, tirar os dedos do teclado e carregar no 2) :
E o segundo passo consiste em trocar o buffer visivel numa das metades, usando o comando C-x b :
Erros ? |
Nem sempre tudo corre como esperado. Erros acontecem ! Existem vários tipos de erro :
Erros de compilação |
Podemos ver alguns exemplos de erros de compilação com o programa hello.c :
Se faltar a primeira linha :
printf está a ser usada no programa mas não foi convenientemente declarada. Pode não significar muito por enquanto dado que não vimos matéria suficiente relativamente às funções. Em resumo, as funções, tal como as variáveis devem ser declaradas. A declaração da função printf está no ficheiro stdio.h que portanto deve ser incluído. Como o compilador sabe que printf é uma função da biblioteca standard, é capaz de contornar o erro e compilar o programa até o fim. Se faltar um ponto e virgula (na linha 4) :
Se faltar aspas (linha 4) :
Mais um exemplo : faltam as aspas antes da palavra Hello (linha 4).
Hello é entendida pelo compilador como sendo uma variável (que não está declarada). As duas linhas seguintes indicam que quando um tal erro é encontrado, só a primeira ocorência da variável não declarada é assinalada. A seguir o compilador julga que um parentesis falta antes da palavra world. De facto se Hello fosse uma variável, não poderia haver imediatamente a seguir outra variável este erro é portanto deduzido do erro suposto anteriormente (falta de declaração). Este exemplo mostra que o compilador faz suposições sobre a natureza dos erros para continuar a analisar o programa. Neste caso enganou-se a causa do erro não é uma variável não declarada mas umas aspas em falta. Erros de lógica |
Os erros de software são vulgarmente chamados «bugs» veja aqui uma explicação sobre a palavra.
Os erros de lógica são mais dificeis detectar. Acontecem quando o resultado do programa não é o esperado. Pode terminar com um erro de execução ou simplesmente dar resultados errados.Existem ferramentas sofisticadas que permitem observar o estado do programa (conteúdo das variáveis) equanto corre. Para os programas compilados com o gcc o gdb (Gnu Debugger) é geralmente usado. Como o uso do gdb requer aprender novos comandos vamos descrever um método mais basico usando o um exemplo concreto.