C Funções Básico
Funções
Em C, uma função é um bloco de código que executa uma tarefa específica e pode ser chamado de outros pontos do programa. Ela ajuda a organizar, reutilizar e testar o código. Toda função tem um nome, um tipo de retorno (ou void se não retorna nada) e uma lista de parâmetros (ou void se não recebe nada).
Antes de usar uma função, o compilador precisa conhecer sua assinatura. Isso é feito por meio de um protótipo (declaração), que informa o nome, o tipo de retorno e os tipos dos parâmetros. O protótipo geralmente fica no topo do arquivo ou em um arquivo de cabeçalho (.h).
A passagem de argumentos em C é sempre por valor: a função recebe cópias dos valores. Alterar um parâmetro dentro da função não modifica a variável original. Para modificar o valor original, é preciso passar um ponteiro (endereço da variável).
Uma função pode chamar a si mesma; isso se chama recursão. Toda recursão precisa de um caso base que interrompa as chamadas, caso contrário ocorre estouro de pilha (stack overflow).
Pontos-chave
- Protótipos informam ao compilador a assinatura da função antes de seu uso.
- A passagem de parâmetros em C é sempre por valor: a função recebe cópias.
- O comando
returnencerra a função e devolve um valor (se houver). - Recursão é uma função que chama a si mesma; deve ter um caso base.
- Funções
voidnão retornam valor; usereturn;para sair antecipadamente.
#include <stdio.h>
/* Protótipos: informam ao compilador como as funções são */
int soma(int a, int b);
int fatorial(int n);
void imprime_linha(void);
int main(void) {
int x = 5, y = 3;
/* Chamada de função com passagem por valor */
int resultado = soma(x, y);
printf("soma(%d, %d) = %d\n", x, y, resultado);
/* Passagem por valor: x e y não são alterados */
printf("x = %d, y = %d\n", x, y);
/* Chamada de função recursiva */
printf("fatorial(%d) = %d\n", x, fatorial(x));
/* Função void sem parâmetros */
imprime_linha();
return 0;
}
/* Definição da função soma: retorna a soma de dois inteiros */
int soma(int a, int b) {
return a + b;
}
/* Definição recursiva do fatorial */
int fatorial(int n) {
if (n <= 1) {
return 1; /* caso base */
}
return n * fatorial(n - 1); /* chamada recursiva */
}
/* Função void que apenas imprime uma linha */
void imprime_linha(void) {
printf("----------------\n");
}