Funções na programação C com exemplos: recursivo, embutido

Índice:

Anonim

O que é uma função em C?

A função na programação C é um bloco de código reutilizável que torna um programa mais fácil de entender, testar e pode ser facilmente modificado sem alterar o programa de chamada. As funções dividem o código e modularizam o programa para resultados melhores e eficazes. Em suma, um programa maior é dividido em vários subprogramas que são chamados de funções

Quando você divide um grande programa em várias funções, torna-se fácil gerenciar cada função individualmente. Sempre que ocorrer um erro no programa, você pode facilmente investigar funções com defeito e corrigir apenas esses erros. Você pode facilmente chamar e usar funções sempre que necessário, o que leva automaticamente à economia de tempo e espaço.

Neste tutorial, você aprenderá-

  • Biblioteca vs. Funções definidas pelo usuário
  • Declaração de Função
  • Definição de função
  • Chamada de função
  • Argumentos de função
  • Escopo Variável
  • Variáveis ​​Estáticas
  • Funções Recursivas
  • Funções Inline

Biblioteca vs. Funções definidas pelo usuário

Cada programa 'C' tem pelo menos uma função que é a função principal, mas um programa pode ter qualquer número de funções. A função main () em C é um ponto de partida de um programa.

Na programação 'C', as funções são divididas em dois tipos:

  1. Funções de biblioteca
  2. Funções definidas pelo usuário

A diferença entre a biblioteca e as funções definidas pelo usuário em C é que não precisamos escrever um código para uma função de biblioteca. Já está presente no arquivo de cabeçalho que sempre incluímos no início de um programa. Basta digitar o nome de uma função e usá-la junto com a sintaxe adequada. Printf, scanf são os exemplos de uma função de biblioteca.

Considerando que uma função definida pelo usuário é um tipo de função em que temos que escrever um corpo de uma função e chamar a função sempre que solicitarmos que a função execute alguma operação em nosso programa.

Uma função definida pelo usuário em C é sempre escrita pelo usuário, mas posteriormente pode fazer parte da biblioteca 'C'. É uma grande vantagem da programação 'C'.

As funções de programação C são divididas em três atividades, tais como,

  1. Declaração de função
  2. Definição de função
  3. Chamada de função

Declaração de Função

A declaração de função significa escrever o nome de um programa. É uma parte obrigatória para o uso de funções no código. Em uma declaração de função, apenas especificamos o nome de uma função que vamos usar em nosso programa como uma declaração de variável. Não podemos usar uma função a menos que ela seja declarada em um programa. Uma declaração de função também é chamada de " protótipo de função ".

As declarações de função (chamadas de protótipo) são geralmente feitas acima da função main () e assumem a forma geral:

return_data_type function_name (data_type arguments);
  • O return_data_type : é o tipo de dados da função de valor retornado para a instrução de chamada.
  • O function_name : é seguido por parênteses
  • Nomes de argumentos com suas declarações de tipo de dados, opcionalmente, são colocados entre parênteses.

Consideramos o seguinte programa que mostra como declarar uma função de cubo para calcular o valor do cubo de uma variável inteira

#include /*Function declaration*/int add(int a,b);/*End of Function declaration*/int main() {

Lembre-se de que uma função não retorna necessariamente um valor. Nesse caso, a palavra-chave void é usada.

Por exemplo, a declaração da função output_message indica que a função não retorna um valor: void output_message ();

Definição de Função

Definição de função significa apenas escrever o corpo de uma função. O corpo de uma função consiste em instruções que irão realizar uma tarefa específica. Um corpo de função consiste em um único ou um bloco de instruções. Também é uma parte obrigatória de uma função.

int add(int a,int b) //function body{int c;c=a+b;return c;}

Chamada de função

Uma chamada de função significa chamar uma função sempre que necessário em um programa. Sempre que chamamos uma função, ela executa uma operação para a qual foi projetada. Uma chamada de função é uma parte opcional de um programa.

 result = add(4,5);

Aqui está o código completo:

#include int add(int a, int b); //function declarationint main(){int a=10,b=20;int c=add(10,20); //function callprintf("Addition:%d\n",c);getch();}int add(int a,int b) //function body{int c;c=a+b;return c;}

Resultado:

Addition:30

Argumentos de função

Os argumentos de uma função são usados ​​para receber os valores necessários pela chamada da função. Eles são combinados por posição; o primeiro argumento é passado para o primeiro parâmetro, o segundo para o segundo parâmetro e assim por diante.

Por padrão, os argumentos são passados ​​por valor no qual uma cópia dos dados é fornecida para a função chamada. A variável realmente passada não mudará.

Consideramos o seguinte programa que demonstra os parâmetros passados ​​por valor:

int add (int x, int y);int main() {int a, b, result;a = 5;b = 10;result = add(a, b);printf("%d + %d\ = %d\n", a, b, result);return 0;}int add (int x, int y) {x += y;return(x);}

O resultado do programa é:

5 + 10 = 15 

Lembre-se de que os valores de aeb foram passados ​​para adicionar função não foram alterados porque apenas seu valor foi passado para o parâmetro x.

Escopo Variável

O escopo da variável significa a visibilidade das variáveis ​​dentro de um código do programa.

Em C, as variáveis ​​declaradas dentro de uma função são locais para aquele bloco de código e não podem ser referenciadas fora da função. No entanto, as variáveis ​​que são declaradas fora de todas as funções são globais e acessíveis a partir de todo o programa. As constantes declaradas com um #define na parte superior de um programa são acessíveis a partir de todo o programa. Consideramos o seguinte programa que imprime o valor da variável global tanto da função principal quanto da função definida pelo usuário:

#include int global = 1348;void test();int main() {printf("from the main function : global =%d \n", global);test () ;return 0;}void test (){printf("from user defined function : global =%d \n", global);}

Resultado:

from the main function : global =1348from user defined function : global =1348

Discutimos os detalhes do programa:

  1. Declaramos uma variável global inteira com 1348 como valor inicial.
  2. Declaramos e definimos uma função test () que não recebe argumentos nem retorna um valor. Esta função imprime apenas o valor da variável global para demonstrar que as variáveis ​​globais podem ser acessadas em qualquer lugar no programa.
  3. Imprimimos a variável global dentro da função principal.
  4. Chamamos a função de teste para imprimir o valor da variável global.

Em C, quando os argumentos são passados ​​para os parâmetros da função, os parâmetros atuam como variáveis ​​locais que serão destruídas ao sair da função.

Ao usar variáveis ​​globais, use-as com cuidado porque podem levar a erros e podem ser alteradas em qualquer parte do programa. Eles devem ser inicializados antes de usar.

Variáveis ​​Estáticas

As variáveis ​​estáticas têm um escopo local. No entanto, eles não são destruídos ao sair da função. Portanto, uma variável estática retém seu valor para sempre e pode ser acessada quando a função é inserida novamente. Uma variável estática é inicializada quando declarada e precisa do prefixo estático.

O programa a seguir usa uma variável estática:

#include void say_hi();int main() {int i;for (i = 0; i < 5; i++) { say_hi();}return 0;}void say_hi() {static int calls_number = 1;printf("Hi number %d\n", calls_number);calls_number ++; } 

O programa exibe:

Hi number 1Hi number 2Hi number 3Hi number 4Hi number 5

Funções Recursivas

Considere o fatorial de um número que é calculado como segue 6! = 6 * 5 * 4 * 3 * 2 * 1.

Esse cálculo é feito calculando repetidamente o fato * (fato -1) até que o fato seja igual a 1.

Uma função recursiva é uma função que chama a si mesma e inclui uma condição de saída para finalizar as chamadas recursivas. No caso do cálculo de número fatorial, a condição de saída é fato igual a 1. A recursão funciona "empilhando" chamadas até que a condição de saída seja verdadeira.

Por exemplo:

#include int factorial(int number);int main() {int x = 6;printf("The factorial of %d is %d\n", x, factorial(x));return 0;}int factorial(int number) {if (number == 1) return (1); /* exiting condition */elsereturn (number * factorial(number - 1));} 

O programa exibe:

 The factorial of 6 is 720 

Aqui, discutimos os detalhes do programa:

  1. Declaramos nossa função fatorial recursiva que recebe um parâmetro inteiro e retorna o fatorial desse parâmetro. Essa função se chamará e diminuirá o número até a saída ou a condição de base ser alcançada. Quando a condição for verdadeira, os valores gerados anteriormente serão multiplicados entre si e o valor fatorial final será retornado.
  2. Declaramos e inicializamos uma variável inteira com valor "6" e depois imprimimos seu valor fatorial chamando nossa função fatorial.

Considere o seguinte gráfico para entender melhor o mecanismo recursivo que consiste em chamar a função sozinha até que o caso base ou condição de parada seja alcançado, e depois disso, coletamos os valores anteriores:

Funções Inline

A função na programação C é usada para armazenar as instruções usadas com mais freqüência. É usado para modularizar o programa.

Sempre que uma função é chamada, o ponteiro de instrução salta para a definição da função. Depois de executar uma função, o ponteiro de instrução volta para a instrução de onde saltou para a definição da função.

Sempre que usamos funções, exigimos um ponteiro extra para pular para a definição da função e retornar à instrução. Para eliminar a necessidade de tais ponteiros, usamos funções embutidas.

Em uma função embutida, uma chamada de função é substituída diretamente por um código de programa real. Ele não salta para nenhum bloco porque todas as operações são realizadas dentro da função inline.

As funções embutidas são usadas principalmente para pequenos cálculos. Eles não são adequados quando grande computação está envolvida.

Uma função embutida é semelhante à função normal, exceto que a palavra-chave embutida é colocada antes do nome da função. As funções inline são criadas com a seguinte sintaxe:

inline function_name (){//function definition}

Vamos escrever um programa para implementar uma função embutida.

inline int add(int a, int b) //inline function declaration{return(a+b);}int main(){int c=add(10,20);printf("Addition:%d\n",c);getch();}

Resultado:

Addition: 30

O programa acima demonstra o uso de uma função embutida para adição de dois números. Como podemos ver, retornamos a adição de dois números na função embutida apenas, sem escrever nenhuma linha extra. Durante a chamada da função, acabamos de passar valores nos quais devemos realizar a adição.

Resumo

  • Uma função é um miniprograma ou subprograma.
  • Funções são usadas para modularizar o programa.
  • Biblioteca e definidas pelo usuário são dois tipos de funções.
  • Uma função consiste em uma declaração, um corpo de função e uma parte de chamada de função.
  • A declaração e o corpo da função são obrigatórios.
  • Uma chamada de função pode ser opcional em um programa.
  • O programa C tem pelo menos uma função; é a função principal ().
  • Cada função tem um nome, tipo de dado de valor de retorno ou um void, parâmetros.
  • Cada função deve ser definida e declarada em seu programa C.
  • Lembre-se de que as variáveis ​​comuns em uma função C são destruídas assim que encerramos a chamada da função.
  • Os argumentos passados ​​para uma função não serão alterados porque foram passados ​​por valor nenhum por endereço.
  • O escopo da variável é referido como a visibilidade das variáveis ​​dentro de um programa
  • Existem variáveis ​​globais e locais na programação C