Programação C – Funções

funcoesTodo ser humano, funcionário, esportista, marido (esse tem varias funções rs) ou até mesmo uma ferramenta possui funções. Você é um funcionário e foi contratado na empresa para exercer uma função (programar, analisar, engenhar, administrar, gerenciar, enfim podendo estender a função é claro), um ciclista tem o foco de sua função “pedalar”, dentro desta sua função de pedalar possui técnicas, preparos e conhecimentos para executá-la, a chave inglesa do post ela tem uma função que é girar um parafuso ou porca, tem “pé de porco” por ae que usa chave como martelo (outra função :)), volante de veiculo, trava vidro de carro, registro de chuveiro e afins, alguns usam até como armas (assistam Policia 24h!).

Em C e em diversas linguagens existem funções, cada uma possui um objetivo no caso do ciclista pedalar, e parâmetros e logicas que no caso que usamos do ciclista seria técnicas, preparos e conhecimento para executar. A logica de uma função é a mesma em todas linguagens mudando apenas a maneira de implementar e algumas particularidades da linguagem, mas vamos focar em C que é o foco do artigo, por que eu fiz toda essa encenação? Para ficar claro que função em C no inicio você pode usar para qualquer coisa mas depois de um tempo desenvolvendo, principalmente embarcado é bom ter cuidado e saber usar.

Resumidamente eu diria que uma função seria usada em um programa em C quando você for repetir uma tarefas varias vezes e também melhora e muito a legibilidade do código, pra você e alguém que dará manutenção, antes de sair implementando vamos ver como se usa uma função.

//Estrutura basica de uma função

//1.0 - Prototipo da função
void EscreveNaTela();

//1.1 - A Funcao implementada
void EscreveNaTela()
{
//Logica da função sem retorno (void)
}

//2.0 - Prototipo da função
int SomaDoisValores(int a, int b);

//2.1 - A Função implementada
int SomaDoisValores(int a, int b)
{
//Logica da função com retorno de dados (int, float, char, double, ...)
}

Então temos de declarar um protótipo da função que seria só a “chamada” dela com um tipo, nome da função e nos parenteses os parâmetros se houver ou em branco caso não existir [ void EscreveNaTela() ], e logo abaixo ou até depois do main() a implementação da função em si, quando usamos void não iremos retornar nenhum dado e caso retornar algum valor, declara-se o tipo da função com o tipo de dado retornado, complicado? Olhe a Figura01 e logo em seguida o exemplo1.c:

FuncoesEmC

Figura 1 – Função em C

#include <stdio.h>

// Prototipo das funções
void EscreveNaTela(); // Nao retorna nada pois o tipo da função é void
int SomaDoisValores(int a, int b); // Retorna algum numero inteiro, o tipo da função é int

// Inicio do main()
int main(void)
{
int soma;

EscreveNaTela(); // Apenas chamo a função, não ira retornada nada mesmo
soma = SomaDoisValores(10,3); // Chamo a função e uma variavel antes deve receber o retorno

printf("Soma de 10 + 3 = %dn",soma);
}

// Implementação das funções
void EscreveNaTela()
{
printf("Iniciando o Exemplo1 - Funcoesn");
}

int SomaDoisValores(int a, int b)
{
int c;
c = a+b;

// Realizo as operações da minha função e logo abaixo retorno o resultado com return
return c;
}

Saída:

bueno@ti-cleiton ~/projetos/C/funcoes $ gcc exemplo1.c -o exemplo1 && chmod +x exemplo1
bueno@ti-cleiton ~/projetos/C/funcoes $ ./exemplo1
Iniciando o Exemplo1 - Funcoes
Soma de 10 + 3 = 13

Olhando os comentários no código e a saída do nosso programa compilado ficou fácil entender funções não? Só isso? Não! Funções merecem e devem ser estudadas a fundo, seu uso deve ser pensado, podemos estender o uso de funções com ponteiros, e se tiver um numero grande de parâmetros não é melhor passar uma struct? E se minha função é recursiva dentro dela chamo ela novamente até atender minha necessidade o que acontece? São todos pontos fortes, importantes e interessantes que devem receber uma atenção para não ser surpreendido :).

Até a próxima!

Share Button

CC BY-NC-SA 4.0 Programação C – Funções by Cleiton Bueno is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.