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).
Aqui está um exemplo de um programa completo que usa uma versão simples, recursiva, da função fib
(ver Fibonacci Recursiva):
Este programa imprime uma mensagem que exibe o valor de fib (20)
.
Agora vamos à uma explicação sobre este código.
É 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.
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 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 .
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 () 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 .
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.
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á:
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 A Sample GDB Session 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 para uma introdução sobre compilação de programais mais complexos que consistem em mais de um arquivo de código-fonte.