Ferramentas do usuário

Ferramentas do site


definicao_funcao

Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.


definicao_funcao [2023/09/12 16:14] (atual) – criada - edição externa 127.0.0.1
Linha 1: Linha 1:
 +====== Definições de Funções ======
  
 +  * Comando [[return]]
 +  * Definição [[extern]]
 +  * Definição [[static]]
 +  * Função [[atexit]]
 +
 +
 +===== 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:
 +<code c>
 +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;
 +}
 +</code>
 +----
 +
 +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:
 +<code c>
 +/* 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 */
 +}
 +</code>
 +
 +===== 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.
 +
 +<code c>
 +/* 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;
 +}
 +</code>
definicao_funcao.txt · Última modificação: 2023/09/12 16:14 por 127.0.0.1