Capítulo 10 - Funções

10.1 - Definição de Função

Uma função nada mais é do que uma subrotina usada em um programa.

Na linguagem C, denominamos função a um conjunto de comandos que realiza uma tarefa específica em um módulo dependente de código.

A função é referenciada pelo programa principal através do nome atribuído a ela.

A utilização de funções visa modularizar um programa, o que é muito comum em programação estruturada.

Desta forma podemos dividir um programa em várias partes, no qual cada função realiza uma tarefa bem definida.

Esqueleto de uma função:

tipo_de_retorno nome_da_função (listagem de parâmetros)
{
   instruções;
   retorno_da_função;
}

10.2 - Parâmetros de uma função

Os parâmetros são as variáveis declaradas diretamente no cabeçalho da função.

A finalidade dos parâmetros é fazer a comunicação entre as funções e a função principal.

Chamamos de passagem de parâmetros a passagem de valores entre as funções.

Exemplo de programa usando função em C:

#include<stdio.h>
#include<conio.h>
/**

   Nome da função: multiplica
   recebe como parâmetos dois valores inteiros (N1,N2)
   objetivo:  multiplicar os valores recebidos nos parâmetros.
   retorno:  um parâmetro inteiro (res) contendo o resultado
**/
int multiplica(int N1, int N2) //multiplica recebe N1,N2 e retorna um int
{
  int resultado;
  resultado = N1 * N2;
  return(resultado); //retornando o valor para main
}

/******************* função principal (main) *********************/

int main(void)
{
  int V1, V2, resultado;
  printf("Digite o primeiro valor:");
  scanf("%d", &V1);
  printf("Digite o segundo valor:");
  scanf("%d", &V2);

  //chama a função e recebe o retorno
  resultado = multiplica(V1,V2);
  printf("Resultado = %d\n", resultado);
  getch();
  return 0;
}

Explicação do código do programa:

Observe que o corpo da função multiplica foi declarado e a implementação do código foi feita antes da função main.

Na função main os valores de V1 e V2 foram recebidos.

Foi feita a chamada da função multiplica e a passagem de parâmetros.

O valor retornado pela função foi armazenado em resultado.

O valor armazenado em resultado foi apresentado.

10.4 - Protótipo de função em C

O protótipo de uma função é basicamente, uma declaração da interface da função, ou seja, deve especificar:

  • Tipo da função;
  • Nome da função;
  • Lista de parâmetros que a função necessita;

Exemplo:
int multiplica(int N1, int N2)
Programa em C reescrito usando protótipo:

#include<stdio.h>
#include<conio.h>
/**   Protótipo da função  **/
int multiplica(int N1, int N2);

int main(void)
{
  int V1, V2, resultado;
  printf("Digite o primeiro valor:");
  scanf("%d", &V1);
  printf("Digite o segundo valor:");
  scanf("%d", &V2);

  //chama a função e recebe o retorno
  resultado = multiplica(V1,V2);
  printf("Resultado = %d\n", resultado);
  getch();
  return 0;
}

int multiplica(int N1, int N2) //multiplica recebe N1,N2 e retorna um int
{
  int resultado;
  resultado = N1 * N2;
  return(resultado); //retornando o valor para main
}

10.5 - Função sem retorno

Em C, é possível criar funções que não retornam nenhum valor.

Normalmente, isto é feito quando queremos executar um bloco de comandos, mas estes comandos não precisam retornar nada.

Neste caso, devemos usar void no tipo de retorno do cabeçalho da função.

Se a função não recebe nenhum parâmetro, também colocamos void no local da listagem dos parâmetros.
exemplo:

void imprime_cabec(void)
{
  printf("******************************\n");   
  printf("*       LINGUAGEM C          *\n");
  printf("******************************\n");   

  return; /** retorno de uma função void  **/
}

Para funções do tipo void, (ou seja sem retorno) devemos usar o comando return;

Note bem que este return não contém nenhum parâmetro.

Já que não é preciso retornar nenhum parâmetro e se eu não escrever o comando return?

Se a instrução return for omitida, alguns compiladores vão gerar mensagens de advertência (warning), pois o padrão ANSI C recomenda a utilização da instrução.

Exemplo de programa usando funções com e sem retorno.

#include<stdio.h>
#include<conio.h>

/******* Área dos protótipos ******/
void imprime_cabec(void);
int multiplica(int N1, int N2);
/******* fim dos protótipos *******/

/* ******* FUNÇÃO PRINCIPAL *******/
int main(void)
{
  int V1=0, V2=0, resultado=0;
  //Chamada da função imprime_cabec
  imprime_cabec();

  printf("Digite o primeiro valor:");
  scanf("%d", &V1);
  printf("Digite o segundo valor:");
  scanf("%d", &V2);

  //chama a função e recebe o retorno
  resultado = multiplica(V1,V2);
  printf("Resultado = %d\n", resultado);

  getch();
  return 0;
}
/* ******** FIM DA FUNÇÃO PRINCIPAL *******/

/* --------- Corpo das funções --------- */
/*
***** Função imprime_cabec *****
Parâmetros de entrada: não tem (void)
Objetivo: imprimir cabeçalho na tela
Tipo de retorno: não tem (void)
*/
void imprime_cabec(void)
{
  printf("******************************\n");
  printf("*       LINGUAGEM C          *\n");
  printf("******************************\n\n");

  return;/* retorno de uma função void  */
}

/****** Função multiplica *****
* Parâmetros de entrada: N1, N2 ambos int
* Objetivo: multiplicar valores
* Tipo de retorno: int (resultado);
**/
//multiplica recebe N1,N2 e retorna um int
int multiplica(int N1, int N2)
{
  int resultado;
  resultado = N1 * N2;

  //retornando o valor para main
  return(resultado);
}

Neste programa utilizamos duas funções, uma delas com retorno de valor multiplica() e outra delas sem retorno imprime_cabec().

Primeiramente, declaramos todos os protótipos das funções antes da main.

Na função main() são feitas as chamadas para as outras funções.

Após a finalização do código da main(), são implementados os corpos das outras funções.

Quando a função main() chama (invoca) outra função, o programa “salta” para o trecho de código da função que foi chamada, executa esta função e depois retorna novamente para a função principal main().

10.6 - Referências:

CASAVELHA, Eduardo. Funções em C. Disponível em: http://linguagemc.com.br/funcoes-em-c . Acessado em novembro de 2017.

results matching ""

    No results matching ""