Definições de Funções

Criação de Funções

As técnicas de programação dizem que, sempre que possível, evite códigos extensos, separando o mesmo em funções, visando um fácil entendimento e uma manutenção facilitada. De acordo com a técnica, devem-se agrupar códigos correlatos em uma função.

Uma outra utilização de função é quando um trecho de código será utilizado muitas vezes no programa. Deve-se colocar este trecho em uma função e sempre que for preciso chamar a função.

A Linguagem C possibilita criar funções, sendo possível passar parâmetros para elas e retornar valores tanto no nome da função como em algum parâmetro passado.

Função e Protótipo (assinatura da função)

O uso de funções na Linguagem C exige certas regras. Primeiramente a função deve estar definida, isto é, deve-se indicar para o compilador qual o nome da função e quais são os parâmetros esperados.

Uma maneira simples de se resolver isto é a colocação da função antes de seu uso, ou seja, coloca-se a função dentro do programa fonte antes das posições onde ela é chamada.

Quando se têm sistemas grandes, não é recomendável ter um único arquivo fonte, pois a manutenção seria impraticável. Neste caso é possível ter uma função definida em um programa fonte e seu uso em outro programa fonte. Para resolver este problema a Linguagem C criou uma definição chamada de protótipo.

No protótipo de uma função é definido somente o necessário para o compilador não acusar erros. A definição do protótipo geralmente é colocada dentro de arquivos header e incluída dentro dos programas fontes.

No protótipo somente são informados o nome da função, o seu tipo de retorno e o tipo de cada parâmetro esperado.

Definido Funções

Sintaxe:

tipo_retorno nome_função(tipo_parâmetro_01 nome_parâmetro_01, tipo_parâmetro_02 nome_parâmetro_02, ....)
{
   ....
   bloco de comandos;
   ....
   return tipo_retorno;
}

Para se definir uma função deve-se indicar o tipo do retorno da função, seu nome e os parâmetros da mesma. Uma função pode ou não retornar um valor. Se uma função não retorna nenhum valor seu retorno deve ser definido como void. Os parâmetros devem ser definidos, um por um, indicando o seu tipo e nome separado por virgula.

Veja o exemplo:

/* programa definindo_funcao.c */
 
#include <stdio.h>
 
int soma (int,  int); /* Declaração da função (protótipo da função.
                         Esta declaração indica que a função soma irá receber 2 valores inteiros e vai retornar 1 valor inteiro */
 
int main (void)
{
   int iValor_a;
   int iValor_b;
   int iResultado;
 
   printf("Entre com os valores:");
   scanf("%d %d", &iValor_a, &iValor_b);
 
   iResultado = soma(iValor_a, iValor_b); /* chamada da função */
 
   printf ("Soma : %d\n", iResultado);
 
   return 0;
}
 
int soma (int a, int b) /* função soma que recebe 2 inteiros */
{
   return a + b; /* retornar 1 valor inteiro */
}

Escopo de Variáveis

Entende-se como escopo de variáveis a área onde o valor e o nome dela tem significado. Pode-se ter dois tipos de variáveis na Linguagem C. O primeiro tipo é a variável global. Uma variável é global quando a mesma é definida fora de qualquer função. Esta variável pode ser usada em qualquer função e o significado dela abrange todo o programa fonte. As variáveis locais são definidas dentro de funções e o seu significado é somente válido dentro da função. Assim têm-se duas variáveis com o mesmo nome em funções diferentes.

Variáveis Globais

As variáveis globais são definidas fora de qualquer função e o seu nome é válido para todo o programa. Qualquer função que alterar o seu conteúdo estará alterando para todo o programa pois estas variáveis ficam em uma área de dados disponível para todo o programa.

Variáveis Locais

Quando uma variável é definida dentro de uma função, está sendo definindo uma variável local à função. Esta variável utiliza a pilha interna da função como memória, portanto ao final da função este espaço de memória é liberado e a variável não existe mais. Portanto a definição da variável só é valida dentro da função.

Os parâmetros de uma função também são considerados variáveis locais e também utilizam a pilha interna para a sua alocação.

/* programa escopo_variavel.c */
 
#include <stdio.h>
 
int soma (int,  int);
int diferenca (int,  int);
void le_valores(void);
 
int G_iValor_a; /* Declarando as variáveis como públicas, ou seja, elas estarão disponíveis para uso em todo o programa. */
int G_iValor_b;
 
int main(void)
{
   int iResultado; /* Variável local e portanto somente disponível para a função main */
 
   le_valores();
 
   printf("Soma : %d\n", soma (G_iValor_a, G_iValor_b)); /* uso das variáveis públicas declaradas anteriormente. */
 
   printf("Diferenca : %d\n", diferenca (G_iValor_a, G_iValor_b)); /* uso das variáveis públicas declaradas anteriormente. */
 
   return 0;
}
 
void le_valores(void)
{
   printf("Entre com os valores:");
   scanf("%d %d", &G_iValor_a, &G_iValor_b); /* uso das variáveis públicas declaradas anteriormente */
   return;
}
 
int soma (int a, int b) /* Variáveis declaradas como parâmetros de função sempre são locais, portanto as variáveis a e b 
                           estão disponíveis para uso somente na função soma. */
{
   int iResultado; /* Variável local e portanto somente disponível para a função soma. Importante: não é a mesma variável definida anteriormente. */
 
   iResultado = a + b;
   return iResultado;
}
 
int diferenca (int a, int b) /* Variáveis declaradas como parâmetros de função sempre são locais, portanto as variáveis a e b estão disponíveis 
                                para uso somente na função diferenca, embora na função soma também tenha sido utilizado o mesmo nome para as variáveis.  */
{
   int iResultado;
 
   iResultado = a - b;
   return iResultado;
}
definicao_funcao.txt · Última modificação: 2008/05/13 17:17 por laureano
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0