arrow-left

Todas as páginas
gitbookFornecido por GitBook
1 de 5

Loading...

Loading...

Loading...

Loading...

Loading...

Explicação do Programa Completo

Aqui está a explicação do código do exemplo na seção anterior.

Este programa de exemplo imprime uma mensagem que mostra o valor de fib (20) e termina com o código 0 (que indica uma execução bem-sucedida).

Todo programa em C inicia com a execução da função chamada main. Portanto, o programa de exemplo define uma função chamada main para fornecer uma maneira de iniciá-lo. O que essa função faz é o que o programa faz. Veja A Função main.

A função main é a primeira a ser chamada quando o programa é executado, mas ela não é a primeira a ser definida no código de exemplo. A ordem das definições de funções no código-fonte não faz diferença para o significado do programa.

A chamada inicial para main sempre passa certos argumentos, mas a main não precisa se preocupar com eles. Para ignorar esses argumentos, defina a main com void como na lista de parâmetros. (void como na lista de parâmetros de função normalmente significa "chamar sem argumentos", mas a main é um caso especial.)

A função main retorna 0 porque essa é a maneira convencional de ela indicar uma execução bem-sucedida. Ela poderia, ao invés disso, retornar um número inteiro positivo para indicar erro, e alguns programas utilitários têm convenções específicas para o significado de certos códigos numéricos de erro. Veja Valores da main.

A maneira mais simples de imprimir texto em C é chamando a função printf, então aqui explicamos brevemente o que essa função faz. Para uma explicação completa de printf e das outras funções padrão de entrada e sída (E/S), veja a seção "I/O on Streams" no The GNU C Library Reference Manual (disponível somente em inglês).

O primeiro argumento da printf é uma constante string (Strings Constantes) que é um modelo para a saída. A função printf copia a maior parte dessa string diretamente para a saída, incluindo o caractere de nova linha no final da string, que é escrito como '\n'. A saída vai para a saída padrão do programa, que comumente é o terminal.

'%' no modelo introduz um código que substitui outro texto na saída. Especificamente, '%d' significa pegar o próximo argumento da printf e substituí-lo no texto como um número decimal. (O argumento para '%d' deve ser do tipo int; se não for, printf funcionará mal.) Então, a saída será uma linha que se parece com isso:

O item 20 da série Fibonacci é 6765

Este programa não contém uma definição para a printf porque ela é definida pela biblioteca C, o que a torna disponível em todos os programas em C. No entanto, cada programa precisaria declarar a printf para que ela seja chamada corretamente. A linha #include cuida disso; ela inclui um arquivo de cabeçalho chamado stdio.h no código do programa. Esse arquivo é fornecido pelo sistema operacional e contém declarações para as muitas funções padrão de entrada/saída da biblioteca C, dentre elas a printf.

Não se preocupe com arquivos de cabeçalho por agora; explicaremos eles mais tarde em Arquivos de Cabeçalho.

O primeiro argumento da printf não precisa ser uma constante string; pode ser qualquer string (veja Strings). No entanto, usar uma constante é o caso mais comum.

Programa Completo Linha por Linha

Aqui está o mesmo exemplo explicado linha por linha. Iniciantes, vocês acham que esta seção ajuda ou não? Vocês gostariam de um layout diferente por exemplo? Por favor, escreva para rms@gnu.org (em inglês).

#include <stdio.h>      /* Inclui as declarações de funções */
                        /*   de E/S comuns como a printf.  */
                        /* A maiora dos programas precisa delas.  */

int                     /* Essa função retorna um int.  */
fib (int n)             /* O nome dela é fib;  */
                        /*   seu argumento é o n.  */
{                       /* Início do corpo da função.  */
  /* Evita que a recursão seja inifinta.  */
  if (n <= 2)           /* Se n é 1 ou 2,  */
    return 1;           /*   faça com que fib retorne 1.  */
  else                  /* do contrário, some os dois números  */
                        /* Fibonacci anteriores.  */
    return fib (n - 1) + fib (n - 2);
}

int                     /* Essa função retorna um int.  */
main (void)             /* Comece aqui; ignore os argumentos.  */
{                       /* Imprima a mensagem com os números.  */
  printf ("Fibonacci series item %d is %d\n",
          20, fib (20));
  return 0;             /* Termine programa, reporte successo.  */
}

Compilando o Programa de Exemplo

Rodar um programa em C requer converter seu código-fonte num arquivo executável. Isto é chamado de compilar o programa, e o comando para fazer isso usando GNU C é o gcc.

O programa de exemplo consiste num único arquivo de código-fonte. Se o chamarmos de fib1.c, o comando completo para compilá-lo será:

gcc -g -O -o fib1 fib1.c

No comando acima, -g instrui que sejam geradas informações de depuração, -O diz para otimizar em nível básico e -o fib1 diz para criar o programa executável num arquivo fib1.

Para rodar o programa, use o nome do arquivo como um comando do shell. Por exemplo,

Todavia, a menos que você tenha certeza de que o programa está correto, você deve esperar que precise depurá-lo. Portanto, use o comando

que inicia o debugger (ou depurador) GDB (veja em Debugging with GDB) e você pode rodar e depurar o programa executável fib1.

Um conselho do Richard Stallman, a partir da sua experiência pessoal, é ir para o debugger assim que você conseguir reproduzir o problema. Não tente evitar isso usando outros métodos—ocasionalmente eles funcionam como atalhos, mas normalmente eles levam muito tempo. Com o debugger você certamente vai encontrar o problema num tempo razoável; em geral, você terminará seu trabalho mais rapidamente. Quanto mais cedo você levar a sério e iniciar o debugger, mais cedo provavelmente encontrará o problema.

Veja Compilação para uma introdução sobre compilação de programais mais complexos que consistem em mais de um arquivo de código-fonte.

./fib1
gdb fib1
A Sample GDB Sessionarrow-up-right

2. Um Programa Completo

É muito bom escrever uma função Fibonacci, mas você não pode executá-la por si só. Ela é um código útil, mas não é um programa completo. Neste capítulo, apresentamos um programa completo que contém a função fib. Este exemplo mostra como fazer o programa começar, como fazê-lo terminar, como realizar cálculos e como imprimir um resultado na tela.

Exemplo de um Programa Completo

Aqui está um exemplo de um programa completo que usa uma versão simples, recursiva, da função fib (ver Fibonacci Recursiva):

#include <stdio.h>

int
fib (int n)
{
  if (n <= 2)  /* Isto evita recursividade infinita. */
    return 1;
  else
    return fib (n - 1) + fib (n - 2);
}

int
main (void)
{
  printf ("O item %d da série de Fibonacci é %d\n",
          20, fib (20));
  return 0;
}

Este programa imprime uma mensagem que exibe o valor de fib (20).

Agora vamos à uma explicação sobre este código.