On this post we write the "Hello, world!" program.
We talk about functions, command blocks, text indentation.
Come back soon, I am typing the english version of this post.
Criaremos o exemplo "Alo, mundo!" e comentaremos algumas partes de um programa em C.
Falaremos sobre Funções, blocos de comandos, indentação.

Preparação
Neste post usaremos um editor de textos e o compilador MinGW. Em posts anteriores comentamos sobre instalar editores de textos simples e o MinGW.
Instalação do Notepad++
Instalando o MinGW
Citaremos neste post o code segment, o data segment e constantes. Já comentamos sobre isto no post sobre gerenciamento de memória.
Monte uma pasta chamada:
C:\Prog\Alo
Funções
Funções são o alicerce da programação em C.
Uma função é uma sequência de instruções a serem executadas.
Algumas funções básicas foram criadas pelo desenvolvedor do compilador e as demais funções necessárias ao funcionamento do programa devem ser escritas por nós.
Nos próximos posts trataremos mais profundamente de funções, mas, para este post você deve saber que após o nome da função devem ser adicionados os caracteres ( e ). Ex.:
uma_funcao()no exemplo acima, "uma_funcao" é um apelido dado a um lugar no Code Segment. É neste local que a programação desta função fica gravada. Você pode imaginar que dentro da palavra "uma_funcao" existe um pequeno programa que é executado sempre que o executável se depara com ela.
Podem haver valores entre os ( ), como nos exemplos:
funcao_recebe_num( 7 )
funcao_recebe_texto("Banana")
funcao_recebe_valores(6, "banana")Estes valores entre os parenteses são chamados de parâmetros da função. Eles são enviados para a função utilizá-los.
Blocos de comandos
Os programas em C são formados por blocos de comandos. Um bloco de comandos é um par de { }.
Um bloco de comandos pode conter somente um comando, como neste exemplo:
{um_comando();}Repare que no final de cada comando deve ser adicionado um ;Ele é importante para indicar ao compilador que um comando terminou naquele ponto.
Um bloco pode ter também mais de um comando:
{um_comando(); outro_comando(65); mais_um_comando("cebola");}Por questões de legibilidade podemos quebrar os comandos em várias linhas:
{
um_comando();
outro_comando(65);
mais_um_comando( "cebola");
}Enter, espaços, tab, podem ser adicionados a vontade entre os comandos para torná-lo mais legível. Todos são ignorados pelo compilador.Alinhando os comandos
No exemplo acima escrevemos os comandos um pouco afastados para a direita para indicar que estão dentro do bloco. Você pode conseguir este afastamento usando o caractere Tab ou com espaços em branco. Nos nossos exemplos usaremos sempre avanços de dois espaços em branco.
Levar o texto mais a direita é chamado em ingles de indent, e trazer de volta para a esquerda, outdent.
Como, no Brasil, os pioneiros da programação não sabiam inglês, o alinhamento do texto mais a direita de passou a se chamar "indentação".
Blocos aninhados
Podemos criar blocos dentro de outros blocos, chamados de blocos aninhados, como no esquema a seguir:
{
funcao1();
funcao1();
{
funcao2();
funcao2();
}
{
funcao3();
{
funcao4();
}
}
}No exemplo acima temos a funcao2() dentro de um bloco aninhado, por isto funcao2() fica mais a direita que funcao1().Não há limide de níveis de aninhamento que os blocos podem ter. No exemplo acima Temos funcao4() dentro de um bloco, que está dentro de um bloco.
É muito importante indentar corretamente pois reduz o tempo necessário para se entender ou alterar um código. Se você duvida, verifique se existem blocos aninhados no exemplo sem identação abaixo, e quais blocos estáo dentro de quais. Note que você até consegue entender o que foi escrito, mas com maior gasto de tempo e de energia mental. Então este é um exemplo que jamais deverá ser seguido:
{
funcao1();
funcao1();
{
funcao2();
funcao2();
}
{
funcao3();
{
funcao4();
}
}
}Entenda que ninguém é doido. Se uma regra como "sempre indente seu código" foi criada, não é por que os mais antigos são otários. Quando uma regra destas é criada, leia-se: "faça data forma para ganhar dinheiro mais rapidamente".
Um programa pode ter vários blocos de comandos, aninhados ou não, como segue:
{
funcao1();
funcao2();
}
{
funcao3();
funcao4();
}A função main
Uma vez que podemos ter inúmeros blocos de comando no nosso programa, o compilador precisa de uma pista sobre onde o a execução inicia.
Então os criadores de C convencionaram que o programa iniciará em uma função de nome obrigatório: a função main.
O bloco principal, então, tem a seguinte aparência:
main()
{
comando();
comando();
comando();
...
}
Criando o programa
Abra o editor de textos. No nosso exemplo usaremos o Notepad++.
Crie um novo documento e salve-o como:
C:\Prog\Alo\alo.c
Digite agora o bloco principal:
{
}
Salvando o trabalho
Salve o seu trabalho agora. Você deve salvar após inserir cada item. Você não quer perder o seu trabalho se houver um blecaute!
Descubra qual é a tecla de atalho do seu editor de textos para salvar o documento. Na maioria das vezes é Ctrl+S. Este é o caso do Notepad++.
Então, apos cada linha de comandos, pressione Ctrl+S.
Geralmente os editores de texto tem uma sinalização indicando que o seu trabalho foi alterado e ainda não foi salvo. No caso do Notepad++ um * junto ao nome do arquivo no topo da janela indica que o trabalho não foi salvo ainda. Assim que o salvamos, o * some.
Indicando a função main
Acima dele indique que ele será o bloco main digitando como segue:
int main(int c, char* argv[])
{
}
Salve o seu trabalho agora. Esta é a última vez que lembraremos que o trabalho deve ser salvo após cada item ser inserido.Em um próximo post explicaremos o que cada palavra da linha main significa.
Já temos um programa
Já temos o necessário para um programa. Se ele fosse agora compilado e linkado, funcionaria perfeitamente. Ele inicia no { faz absolutamente nada e termina em }
Saída de dados
Um programa tem entradas de dados, executa um processamento e tem uma saída de dados com o resultado do processamento.
Para a saída de dados usaremos a função printf. O seu nome significa print formated=imprimir formatado. Ela recebe, na forma de parâmetros, os dados a serem enviados à saída de dados e como ela deverá formatá-los. No nosso caso vamos fazê-la exibir a frase: "Alo, mundo!". Digite a printf como segue:
int main(int c, char* argv[])
{
printf("Alo, mundo!\n");
}
Em posts futuros explicaremos os parâmetros que podem ser enviados a printf. Por hora diremos que o valor entre aspas indica que é uma constante do tipo texto e que \n indica a printf que deverá enviar para a tela o caractere de quebra de linha (tecla return do teclado).
O protótipo de uma função
Se tentássemos compilar o progrma agora ele geraria um erro pois a palavra printf não é conhecida dele como main é.
Devemos escrever no topo do nosso programa uma explicação de como se usa a printf. Assim o compilador passará a reconhecer esta palavra como válida e saberá se a estamos usando de maneira correta.
Esta explicação de uma função que colocamos no topo do programa é chamada de protótipo da função.
Então precisamos colocar acima de main o protótipo da printf.
Diretivas do Pré-processador
A printf precisa de um protótipo. O problema é que nós não sabemos como!
Mas, calma. Contornamos este problema da seguinte forma:
Os criadores dos compiladorer escrevem os protótipos de todas as funções que eles oferecem em arquivos .h que acompanham o compilador.
A extensão .h é a abreviação de header=cabeçalho
A printf é descrita no arquivo stdio.h
Mais tarde falaremos mais sobre o que fazem as diretivas do pré-processador, e o que é o pré-processador. Mas para este exemplo você tem que saber que as diretivas são comandos que iniciam pelo caractere #
Exite a uma diretiva chamada #include que inclui no nosso arquivo o conteúdo de outro arquivo. Não é a toa que geralmente os arquivos .h que o compilador nos oferece ficam numa pasta chamada "include".
Usaremos a diretiva #include para trazer para o nosso arquivo, o .h que possui o protótipo de printf.
O arquivo stdio.h possui os protótipos das funções que envolvem a entrada e saída de dados, inclusive da printf.
Mas como saber isto? Consultando a documentação que acompanha o seu compilador. Na medida que formos utilizando funções em nossos exemplos, indicaremos os arquivos .h necessários.
Digite a #include do stdio.h como segue:
#include <stdio.h>
int main(int c, char* argv[])
{
printf("Alo, mundo!\n");
}
Finalmente, o programa está pronto e já pode ser compilado.
Vamos partir do pressuposto que você salvou o programa como alo.c na pasta c:\prog\alo
Abra o prompt do ms-dos.
Entre na pasta onde está o nosso programa com o comando cd como segue:
cd \prog\alo
Você pode verificar se o arquivo foi salvo corretamente digitando o comando "dir" seguido de enter. Você deve ver algo como:
C:\Prog\Alo> dir
O volume na unidade C é XP
O número de série do volume é 143B-4126
Pasta de C:\Prog\Alo
08/05/2011 11:27 DIR .
08/05/2011 11:27 DIR ..
08/05/2011 11:12 459 alo.c
1 arquivo(s) 459 bytes
Todos os comandos que comentarmos aqui só serão executados após a tecla enter, por isto não citaremos mais neste blog a necessidade de pressionar enter após cada comando.O programa gcc.exe, que está na pasta Bin do MinGW, pode ser chamado de qualquer pasta, pois, durante a sua instalação, nós colocamos a sua pasta bin na variável PATH.
GCC é o compilador C usado pelo grupo GNU.
Adiante também usaremos o GPP, que é o compilador C++ do grupo GNU.
Comentamos sobre isto no post sobre o GCC
Se digitarmos somente "gcc" e o nome do arquivo fonte, ele vai compilar e linkar o programa e gerar somente o aquivo executável. Por default ele cria um programa chamado "a.exe".
Você pode indicar o nome desejado do arquivo executável com a opção -o seguida do nome do arquivo. Digite:
gcc alo.c -o alo.exe
Se você instalou tudo corretamente e digitou o programa sem erros, nada deve ter aparecido, a não ser o prompt do ms-dos aguardando por um novo comando.
Se alguma mensagem aparecer e você não entender, envie-nos na forma de comentários neste post que postaremos um comentário respondendo como corrigir o problema.
Você pode se certificar que o executável foi criado repetindo o comando dir:
C:\Prog\Alo> dir
O volume na unidade C é XP
O número de série do volume é 143B-4126
Pasta de C:\Prog\Alo
08/05/2011 11:27 DIR .
08/05/2011 11:27 DIR ..
08/05/2011 11:12 459 alo.c
08/05/2011 11:15 22.526 alo.exe
2 arquivo(s) 22.985 bytes
1 arquivo(s) 459 bytes
Repare que após converter o programa para linguagem de máquina e ligá-la a bibliotecas como a stdio, o tamanho do arquivo final ficou bem maior que o do arquivo fonte.Para testar o programa, digite o seu nome:
C:\Prog\Alo>alo Alo, mundo! C:\Prog\Alo>
Veja neste vídeo o que foi feito neste post.
Nele criamos a pasta Prog, que utilizaremos nos exemplos deste blog.
Abaixo da prog criamos a pasta alo.
Digitamos o programa no Notepad++.
Repare que a cor dos textos varia no Notepad++ conforme a sua função no programa.
Este recurso é oferecido por vários editores de código e é chamado de "syntax highlighting".
Depois abrimos uma janela do cmd, compilamos e testamos o programa.
Esperamos que este post tenha sido útil. Tem algum comentário, dúvida, crítica ou elogio? Esreva nos comentários.
english top
No comments:
Post a Comment