Curso de C: Aula 7 - Funções
Autor: Zainer Araujo | Publicado: 2009-11-02T15:53:00-08:00

Como o nome diz, intuitivamente, são "coisas" que desenvolvem tarefas, saõ como caixas pretas, onde você passa algum tipo de dado, e espera receber algum tipo de saída. Explicando tecnicamente, são módulos ou blocos de código que executam uma determinada tarefa.As funções existem, por dois motivos básicos: depuração de erros, quando se quebra um problema em pedaços menores, fica mais fácil detectar onde pode existir um problema. Outro motivo é a reutilização. É visível que grande parte dos códigos que existem em um programa são repetidos, só se diferenciando as variáveis que são passadas a eles.Podemos dar nomes as funções assim como em variáveis, lembre-se da aula passada. Letras de A até Z, sem preocupação de case (maiúscula/minúscula), de 0 a 9 e com underscore (aquele menos achatado, "_"). Precisa começar por um caracter ou underscore. É sensitivo a case, ou seja, funções com o mesmo nome, mas letras diferentes (em case) não são consideradas iguais. Podemos exemplificar: esta_e_uma_funcao e Esta_e_uma_funcao, o "E" ("e") é diferente!A cara de uma função em C é assim:tipo nome(tipo1 var1, tipo2 var2, ...){código1; ...códigoN;}void diminuir(int parcela1, int parcela2){int total;total = parcela1 - parcela2; printf ("A subtracao vale: %d",total);}Ignore a palavra void por enquanto, acredite que ela quer dizer nada pelo momento. Quando a chamo, diminuir(5,3);, eu recebo a mensagem da subtração de 5 por 3, e retorno ao meu programa. Note que as chaves ({ e }) delimitam o que é da função (bloco) e o que não é.A função main()A função main() é a função principal de um programa. Ou seja, todo programa tem que ter a função main(), caso contrário o compilador reclama e não gera o executável.Um programa começa executando a função main(). E um programa termina, quando esta função termina. Porém, dentro da função main() você pode chamar (executar) outras funções. Falaremos mais sobre o main() adiante.Podemos chamar (executar) as funções do ponto que desejamos, desde que ela já tenha sido declarada. Ela desvia o fluxo do programa, por exemplo:main(){int a=10,b=3;ação1;ação2;diminuir(a,b);ação3;}Nota: neste exemplo ação 1, 2 e 3, podem ser qualquer comando (Até mesmo outra função).O programa desviará o fluxo, após a "ação2", quando ele chamar a função diminuir. isto suspenderá temporariamente a execução do programa para poder executar a função diminuir, até que a mesma termine (retorne).Existem basicamente, dois tipos de funções. Aquelas que retornam alguma coisa a quem a chamou e aquela que não retorna nada.Começando pelas que não retornam, elas simplesmente realizam tarefas, como o exemplo anterior. Ela faz uma série de passos, e retorna o fluxo ao programa principal, sem interferir em nada em sua execução, a não ser pelo tempo perdido e saída na tela.Outra opção são funções que retornam um valor de um tipo. Lembre-se, como declaramos uma função? tipoX nome(tipo1 var1,tipo2 var2); e assim vai. Ou seja, o tipoX eqüivale ao que a função vai retornar. Vamos entender:int diminuir(int parcela1, int parcela2){int total;total = parcela1 - parcela2; return total;}main(){int a=10,b=3,total;ação1;ação2;total = diminuir(a,b);printf ("A subtracao vale: %d",total);ação3;}O efeito é exatamente o mesmo, só que agora o programa principal é que estará jogando a mensagem na tela e a variável do programa, chamada total, que terá o valor da subtração (resultado, tipo int, retornado de diminuir(a,b)). Aos poucos vamos juntando as peças.O que determinou a saída da função, no caso, foi a chamada ao comando return, que interrompe o fluxo do bloco que está sendo executado (saindo deste bloco) e volta aquele imediatamente anterior. Não é necessário chegar até a última linha da função, o return pode estar na 1a, 2a, onde quer que seja.O que é o main?main() também é uma função, é a função que é obrigada a existir em todos os programas. Como já disse, tal função é procurada e a primeira a ser executada em todo programa.Ela pode retornar um valor de tipo int. Ou seja, retorna um número, em geral para o sistema operacional, com o código de sucesso ou indicando qual o erro (número do erro) ocorreu durante a execução do programa.