Definição
Funções são blocos de programas que permitem ao usuário deixar o programa mais legível e expansível.
Abaixo é apresentando um exemplo de programa que faz uso de funções:
O programa executando passo-a-passo (aguarde!!):
A estrutura de uma função
Tomamos como base a função abaixo:
Retorno da função
Dentro da função temos o pedaço de código: return resultado;
Durante a execução da função, quando alcançar uma declaração return a função encerra e retorna o valor.
Uma função pode ter diversos return, porém só vai executar até alcançar o primeiro. Veja um exemplo:
Perceba que nesse caso, nem chegamos a comparar o valor com 0 (zero), pois se o número não for positivo, nem negativo, com certeza será 0.
Assim, verifique que na função a seguir, o comando printf irá apresentar um valor diferente do esperado:
Caso não se deseja ou espere que nenhum retorno seja feito por uma função, o return pode ser declarado sem valor
depois e no cabeçalho da função utilizar a palavra void:
Parâmetros de uma função
Partimos agora para a passagem de parâmetros, dada a parte da função como modelo: nome_funcao(int valor1, int valor2)
Dentros do parênteses podem ser enviado vários parâmetros nas mais diversas combinações:
ou também nenhum parâmetro:
Os parâmetros são passados por valores para as variáveis e essas variáveis tem Escopo Local, isto é, poderão ser utilizadas apenas dentro da função.
Por exemplo, veja o programa a seguir:
De forma didática, podemos pensar a função como o bloco apresentado:
Todos os parâmetros, tanto de entrada quanto de saída, são passados por valores ou ponteiros (isso será um assunto futuro), sendo armazenados internamente nas suas respectivas variáveis.
Porém, podemos ter a variáveis com o Escopo Global, dessa forma, eles poderão ser utilizadas por funções internas:
A grande vantagem de se utilizar o Escopo Global é a possibilidade alterar o valor de uma variável por uma função e esse valor ser utilizado por outra função (há outra maneira de fazer isso com ponteiros):
Protótipos de Funções
Até agora nos exemplos estamos inserido as funções antes da função main,
isso se deve a necessidade do compilador conhecer as funções que serão utilizadas antes da função principal (main).
E conforme o programa vai ficando grande, se torna inviável e pouco legível declarar todas as funções antes da função main.
Por isso, as funções podem ser declaradas apenas através do Protótipos da Função, podendo ser antes da função main:
Ou ainda, incluíndo num arquivo separado (verifique os arquivos classificador.c e classificador.h) e fazendo o uso da diretiva #include:
Os protótipos devem ser exatamente iguais ao cabeçalho da função.
Pode acontecer de alterar uma função e esquecer de alterar o protótipo!Atividades
- 1. Escreva uma função que calcule e apresente a distância entre dois pontos \((x1, y1)\) e \((x2, y2)\). Todos os números e valores de retorno devem ser do tipo float.
- 2. Faça uma função que receba nota do aluno, retornando 1 se a nota for maior ou igual a 5, indicando que o aluno foi aprovado, ou 0 se for menor e indicando que o aluno foi reprovado.
- 3. Utilizando a função da atividade anterior, faça um programa que leia 10 notas de alunos e identifique quantos foram aprovados e reprovados.