Em programação, a capacidade de dividir um problema em partes menores e reutilizáveis é fundamental para escrever código organizado e eficiente. As funções são o principal mecanismo para alcançar essa modularização na linguagem C.

Nesta seção, vamos explorar como as funções podem ser estruturadas de diferentes formas: algumas recebem dados (parâmetros) e produzem resultados (valores de retorno), outras apenas executam ações específicas. Compreender essas variações permite criar programas mais flexíveis e bem organizados.

Além disso, veremos como chamar funções corretamente, respeitando sua assinatura — ou seja, a combinação de tipos de parâmetros e tipo de retorno que define sua interface de uso. Também discutiremos aspectos práticos, como a ordem em que as funções devem aparecer no código e o papel dos protótipos na organização do programa.

Ao final desta seção, você será capaz de criar e utilizar funções com diferentes propósitos, tornando seus programas mais legíveis, modulares e fáceis de manter.

Funções com e sem parâmetros

Nem toda função precisa receber parâmetros. Quando isso não for necessário, a lista de parâmetros pode ser vazia.

Além disso, nem toda função precisa retornar um valor. Por isso, podemos ter diferentes combinações:

Essas possibilidades dão bastante flexibilidade à organização do programa.

Chamando uma função

Sabemos, desde os primeiros programas em C, que a execução do programa começa na função main. Portanto, para que outras funções sejam executadas, elas precisam ser chamadas em algum ponto do programa.

Uma chamada de função é feita por meio do nome da função seguido da lista de argumentos entre parênteses. Esses argumentos devem ser compatíveis com os parâmetros definidos na função, tanto em quantidade quanto em ordem e tipo.

A parte da definição que contém o tipo de retorno, o nome da função e os tipos dos parâmetros é conhecida como assinatura da função.

Vamos observar alguns exemplos.

Função sem retorno

Considere a função a seguir:

#include <stdio.h>

void imprime(char letra, int qtd){
    int i;

    for(i = 0; i < qtd; i++){
        printf("%c", letra);
    }
}