Todo 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:
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!
Programação C – Funções by Cleiton Bueno is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.