Menu
Coddy logo textTech

Funções Estáticas

Parte da seção Object Oriented Programming do Journey de C da Coddy — lição 4 de 61.

Quando você divide o código em vários arquivos, cada função definida em um arquivo de origem é visível 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 ou sequer conhecer.

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

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

// Auxiliar privado - visível apenas neste arquivo
static int square(int x) {
    return x * x;
}

// Função pública - pode ser chamada a partir 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 está marcada como static, portanto, ela existe apenas dentro de math_utils.c. Se main.c tentar chamar square() diretamente, o linker produzirá um erro — a função simplesmente não existe fora de seu arquivo.

Esta é a maneira do C de alcançar o encapsulamento no nível do arquivo. Funções estáticas permitem que você esconda detalhes de implementação, mantendo sua interface pública limpa enquanto utiliza qualquer lógica auxiliar necessária internamente.

challenge icon

Desafio

Fácil

Vamos construir uma calculadora de distância que utiliza 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 declarando uma única função pública distance_squared que recebe quatro inteiros (x1, y1, x2, y2) representando dois pontos e retorna um inteiro. Inclua guards usando o símbolo DISTANCE_H.
  • distance.c: Seu arquivo de origem contendo a implementação. Crie uma função auxiliar static chamada square que recebe um inteiro e retorna o seu quadrado. Esta auxiliar deve ser visível apenas dentro de distance.c. Em seguida, implemente distance_squared usando sua auxiliar estática para calcular (x2-x1)² + (y2-y1)².
  • main.c: Seu arquivo principal que inclui o cabeçalho e utiliza a função pública. A auxiliar square não deve estar acessível aqui — apenas distance_squared está disponível.

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

Você receberá quatro entradas inteiras: 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

Folha de consulta

A palavra-chave static restringe a visibilidade de uma função ao arquivo onde ela é definida, criando uma função privada que não pode ser chamada a partir de outros arquivos de origem.

// Auxiliar privado - visível apenas neste arquivo
static int square(int x) {
    return x * x;
}

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

Funções estáticas fornecem encapsulamento em nível de arquivo, permitindo que você oculte detalhes de implementação enquanto mantém sua interface pública limpa.

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 Object Oriented Programming