Menu
CoddyTech

Funções estáticas

Parte da seção Programação Orientada a Objetos do Journey de C da Coddy. Lição 4 de 61.

Quando você divide o código em vários arquivos, todas as funções definidas em um arquivo-fonte ficam visíveis para outros arquivos por padrão. Mas, às vezes, você precisa de funções auxiliares que devem ser usadas apenas internamente: funções que outros arquivos não devem acessar nem mesmo conhecer.

A palavra-chave static, quando aplicada a uma função, restringe sua visibilidade ao arquivo em que ela está definida. Isso cria uma função privada que não pode ser chamada de outros arquivos-fonte, mesmo que alguém tente declará-la.

// math_utils.c
#include "math_utils.h"

// Função auxiliar privada - visível apenas neste arquivo
static int square(int x) {
    return x * x;
}

// Função pública - pode ser chamada de main.c
int sum_of_squares(int a, int b) {
    return square(a) + square(b);
}

Neste exemplo, sum_of_squares é declarada no cabeçalho e pode ser usada em qualquer lugar. No entanto, square é marcada como static, então existe apenas dentro de math_utils.c. Se main.c tentar chamar square() diretamente, o vinculador produzirá um erro: a função simplesmente não existe fora do arquivo.

Essa é a maneira de C alcançar o encapsulamento no nível do arquivo. Funções estáticas permitem ocultar detalhes de implementação, mantendo sua interface pública limpa e usando internamente a lógica auxiliar necessária.

challenge icon

Desafio

Fácil

Vamos criar uma calculadora de distância que usa uma função auxiliar privada para calcular o quadrado de um número: um detalhe que deve permanecer oculto do restante do seu programa.

Você criará três arquivos:

  • distance.h: seu arquivo de cabeçalho que declara uma única função pública distance_squared, que recebe quatro inteiros (x1, y1, x2, y2) representando dois pontos e retorna um inteiro. Inclua proteções contra inclusão múltipla usando o símbolo DISTANCE_H.
  • distance.c: seu arquivo-fonte que contém a implementação. Crie uma função auxiliar static chamada square, que recebe um inteiro e retorna seu quadrado. Essa função auxiliar deve estar visível somente em distance.c. Em seguida, implemente distance_squared usando sua função auxiliar estática para calcular (x2-x1)² + (y2-y1)².
  • main.c: seu arquivo principal, que inclui o cabeçalho e usa a função pública. A função auxiliar square não deve estar acessível aqui: somente distance_squared está disponível.

A função distance_squared calcula a distância euclidiana ao quadrado entre dois pontos. Ao manter a função square estática, você oculta esse detalhe de implementação de qualquer código fora de distance.c.

Você receberá quatro valores inteiros de entrada: x1, y1, x2 e y2.

Imprima a distância ao quadrado neste formato:

Squared distance: {result}

Por exemplo, com os pontos (0, 0) e (3, 4), a saída seria:

Squared distance: 25

Experimente você mesmo

#include <stdio.h>
#include "distance.h"

int main() {
    int x1, y1, x2, y2;
    scanf("%d", &x1);
    scanf("%d", &y1);
    scanf("%d", &x2);
    scanf("%d", &y2);
    
    // TODO: Chame distance_squared com as coordenadas de entrada
    // e imprima o resultado no formato: "Squared distance: {result}"
    
    return 0;
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de C online