Função
- Conjunto de instruções projetadas para cumprir uma tarefa particular e agrupadas em uma unidade, com um nome, para referenciá-la.
- Uma das finalidades de sua utilização é permitir que todos os outros programadores possam utilizar as funções em seus programas.
- A existência de funções evita que o programador escreva o mesmo código várias vezes.
- Podem escolher detalhes de operação de partes do programa que não necessitam conhecê-las.
- Você pode pensar em criar uma função quando perceber que uma determinada sequência de código pode se repetir no programa.
- O código de uma função é agregado ao programa uma única vez, e pode ser executado muitas vezes no decorrer do programa.
- O uso de funções reduz o tamanho do programa.
Exemplos de Funções:
printf()
scanf()
system()
main()
As funções citadas possuem nomes especiais, onde realizam tarefas específicas do programa compilador da linguagem C. Mais adiante, serão explicados como são criadas funções definidas pelo programador, podendo executar qualquer tarefa.
Chamando uma função
Ao terminar a execução da função, ele volta para a posição seguinte à da chamada.
Componentes necessários para adicionar uma função a um programa:
- Protótipo da função;
- Chamada à função;
- Definição da função.
Protótipo de uma função
A declaração de uma função é chamada de protótipo da função.
Por exemplo, quando chamamos a função getche() devemos incluir, no programa,
o arquivo conio.h, pois nele está escrito o protótipo da função.
Se a função não for declarada (não tiver o protótipo), o compilador não poderá
verificar se há erros em seu uso.
No exemplo visto, a declaração da função está na seguinte linha:
Protótipo externo e local
Há duas formas de declarar funções em C:
- Protótipo externo: escrita antes de qualquer função; a declaração é feita uma única vez e é visível para todas as funções do programa.
- Protótipo local: é escrita no corpo de todas as funções que a chamam, antes de sua chamada.
Exemplo de protótipo local:
/* Conversão de Temperatura em graus Fahrenheit para Celsius */
#include
#include
main() {
float celsius(float); /*protótipo local */
float c, f;
printf("Digite a temperatura em graus Fahrenheit: ");
scanf("%f", &f);
c = celsius(f); /* Chamada à função */
printf("Celsius = %.2f\n", c);
system("PAUSE");
return 0;
}
/* celsius() */
/* Definição da função */
float celsius(float fahr)
{
float c;
c = (fahr - 32.0) * 5.0 / 9.0;
return c;
}
O tipo de uma função
É definido pelo tipo de valor que ela retorna por meio do comando return.
Uma função é do tipo float quando retorna um valor do tipo float.
Os tipos de funções C são os mesmo tipos de varáveis, exceto quando a função não retorna nada: tipo void.
Portanto, o tipo de uma função é determinada pelo valor que ela retorna via comando return, e não pelo tipo de argumentos que ela recebe.
O comando return
Termina a execução da função e retorna o controle para a instrução seguinte do código de chamada.
Se após a palavra return houver uma expressão, o valor dela é retornado à função que chama.
O valor é convertido para o tipo da função, especificado no seu protótipo.
Sintaxe de uma instrução return:
return;
return expressão;
return (expressão);
Exemplos de utilização do return:
Baseando-se no exemplo dado anteriormente (Conversão de Temperatura em graus Fahrenheit para Celsius), podemos realizar o retorno da função das seguintes formas:
Exemplo 1:
Retornando o valor atribuído a variável declarada dentro da função.
/* celsius() */
/* Definição da função */
float celsius(float fahr)
{
float c;
c = (fahr - 32.0) * 5.0 / 9.0;
return c;
}
Exemplo 2:
Retornando o resultado obtido da operação diretamente pelo comando return, sem instanciar uma variável.
/* celsius() */
/* Definição da função */
float celsius(float fahr)
{
return (fahr - 32.0) * 5.0 / 9.0;
}
Funções sem passagem de parâmetros e sem retorno
- Tipo mais simples de função;
- Não recebe qualquer informação no momento de sua chamada;
- Não repassa qualquer valor para quem a chamou.
Exemplo:
/* Função sem passagem de parâmetro e sem retorno */
#include
#include
int a, b, s; //variáveis globais
int soma()
{
printf("\nDigite o primeiro numero: ");
scanf("%d*c", &a);
printf("\nDigite o segundo numero: ");
scanf("%d*c", &b);
s = a + b;
printf("\nSoma = %d", s);
}
int main()
{
soma();
getche();
return 0;
}
Funções sem passagem de parâmetros e com retorno
- Funções que não recebem valores no momento em que são chamadas (parâmetros), mas que devolvem um valor para quem as chamou (retorno).
Exemplo:
/* Função sem passagem de parâmetro e com retorno */
#include
#include
int soma()
{
int a, b, s; //variáveis locais da função soma
printf("\nDigite o primeiro numero: ");
scanf("%d*c", &a);
printf("\nDigite o segundo numero: ");
scanf("%d*c", &b);
s = a + b;
return s; //retorno da função soma
}
int main()
{
int s; //variável local da função main
s = soma(); //chamada da função soma
printf("\nSoma = %d",s);
getch();
return 0;
}
Funções com passagem de parâmetros e sem retorno
- Funções que recebem valores no momento em que são chamadas (parâmetros), mas que não devolvem valor para quem as chamou (retorno).
Exemplo:
/* Função com passagem de parâmetro e sem retorno */
#include
#include
void soma(int a, int b)
{
int s; //variável local da função soma
s = a + b;
printf("\nSoma = %d", s);
}
int main()
{
int a, b; //variáveis locais da função main
printf("\nDigite o primeiro numero: ");
scanf("%d*c", &a);
printf("\nDigite o segundo numero: ");
scanf("%d*c", &b);
soma(a,b);
getch();
return 0;
}
Funções com passagem de parâmetros e com retorno
- Funções que recebem valores no momento em que são chamadas (parâmetros), e que devolvem um valor para quem as chamou (retorno).
Exemplo:
/* Função com passagem de parâmetro e com retorno */
#include
#include
int soma(int a, int b)
{
return a + b;
}
int main()
{
int a, b, s;
printf("\nDigite o primeiro numero: ");
scanf("%d*c", &a);
printf("\nDigite o segundo numero: ");
scanf("%d*c", &b);
s = soma(a,b);
printf("\nSoma = %d",s);
getch();
return 0;
}
Passagem de Parâmetros por Valor
- Significa que a função trabalhará com cópias dos valores passados no momento de sua chamada;
- Esse método copia o valor de um argumento no parâmetro formal da função;
- Alterações feitas no parâmetro da função não têm nenhum efeito nas variáveis usadas para chamá-las.
Quando a função soma_dobro chega ao fim, as variáveis a, b e soma são destruídas e as alterações feitas pelas multiplicações por 2 são perdidas.
Assim, x continua valendo 5 e y continua valendo 3.
Passagem de Parâmetros por Referência
- Significa que os parâmetros passados para uma função correspondem a endereços de memória ocupados por variáveis.
- Toda vez que for necessário acessar determinado valor, isso será feito por meio de referência, ou seja, apontamento ao seu endereço.
Quando a função soma_dobro chega ao fim, as variáveis a, b e soma são destruídas, mas as alterações decorrentes das multiplicações feitas são mantidas, pois cada alteração faz referência a endereços de memória que estavam fora da área destinada à função. Assim, x valerá 10 e y, 6.

Nenhum comentário:
Postar um comentário