►Funções e Procedimentos
Até agora, todo os programas que escrevemos foram colocados direto na função main(). Mas no decorrer em que criamos novos programas, precisaremos reutilizar pequenos, médios, ou grandes trechos de código, sem a necessidade de escreve-los novamente. Para isso, criaremos funções com tarefas específicas pelo programa. Já tínhamos utilizado funções anteriormente (printf(), scanf(), putchar(), getchar(), entre outras).
Ex:
/*
* O programa recebe três funções, cada uma contendo uma mensagem.
* Elas são chamadas pela função main(), exibindo seu conteúdo na ordem que forem chamadas.
* Não existe ordem certa para chamadas de funções.
* Chame na hora que precisar.
*/
#include<stdio.h>
void msg_oi();
void msg_eaee();
void msg_cambio();
main()
{
msg_oi();
msg_eaee();
msg_cambio();
}
void msg_oi()
{
printf("Oi!");
getchar();
}
void msg_eaee()
{
printf("Eaee!");
getchar();
}
void msg_cambio()
{
printf("Cambio!");
getchar();
}
►Regras de funções
- Uma função pode ser invocada por outra.
- Cada função recebe apenas um único nome.
- Uma função deve ser utilizada para, realizar determinada tarefa. Não dependendo do resto do programa.
- Podem receber parâmetros.
- Pode retornar, para o lugar que a invocou, um valor.
- uma função é declarada dentro de blocos.
- Uma função nunca deve receber " ; " no fim de sua declaração.
►Parâmetros
Uma outra forma de enxergarmos uma função, é imaginar um processador de alimentos. Você coloca uma fruta na entrada, e recebe o suco logo depois. Partindo do ponto em que você é apenas um consumidor comum, não lhe interessa, como o processador de alimentos faz o suco. Se ele filtra, coa, faz em tal velocidade e mais milhares de processos, nada lhe interessa. O que importa é você receber seu suco, depois de colocar uma laranja no bocal do aparelho.
Uma função é como esse processador, recebe ( por parâmetros ) o alimento e depois realiza o processo até o resultado final.
Ex:
#include<stdio.h>
/*
* Foi criada uma função chamada calculo.
* Ela recebe um valor por parâmetro.
* Quando chamada pela main(), recebe o valor da variável de n1.
* Ela é processada, como se fosse a " x ".
* E imprimi o valor no fim
*/
void calculo();
main()
{
int n1 = 5;
calculo(n1); // recebe n1 como parâmetro
}
void calculo(int x)
{
int a = 95;
int calc = (a + x)*2;
printf("Cálculo = %d",calc);
}
Eu não poderia enviar mais de um valor para calculo(), pois foi especificado, que calculo() receberia apenas UM PARÂMETRO. Se eu quisesse, poderia declarar, mais de um na função. Lembrando que uma função só recebe o número de parâmetros, que ela foi projetada para receber.
Ex:
#include<stdio.h>
// Aqui esta a mesma função, agora com 2 parâmetros
void calculo();
main()
{
int n1 = 5;
int n2 = 20;
calculo(n1, n2); // recebe n1 e n2 como parâmetro
}
void calculo(int x, int y)
{
int a = 95;
int calc = (a + x + y)*2;
printf("Cálculo = %d",calc);
}
►Return
Ela permite terminar a execução de uma função e voltar ao programa que a invocou. Quando utilizada dentro de main(), termina o programa.
Ex:
#include<stdio.h>
main()
{
int a = 5;
int b = 5;
return a * b; // O que vier depois de return, não executa. ;)
}
Ex2:
int calc(int a, int b)
{
int z = a + b;
return z;
}
►Procedimentos
O procedimento pode ser intendido como aquele que não retorna nada. Diferente de uma função, que tem um tipo e retorna algo. Um exemplo seria a função calculo(). Ela não tem um tipo e não retorna nada. Mas, eis que na linguagem C, sempre quando não colocamos um tipo de retorno, no cabeçalho da função, automaticamente ele é substituído por int. Existem programadores que negam a existência de procedimentos em C, considerando-os como funções. Outros, defendem a diferença entre eles.
Em linguagens como PASCAL, as funções são definidas por FUNCTION, e os procedimentos por PROCEDURE. Eu, particularmente, considero que procedimentos são funções, na linguagem C.
►Void
É um tipo, indicando que uma função não retornará nada. Também, são passadas por parâmetros, indicando que a função não receberá nenhum parâmetro. Um exemplo de void foi o do calculo().
►Variáveis Locais
São variáveis criadas dentro de funções. Diferentes das globais, apenas são reconhecidas dentro da função, sendo destruídos depois do término da função. Foram utilizadas variáveis locais na função calculo().