Menu
Coddy logo textTech

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, toda função definida em um arquivo-fonte fica visível para os 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 foi 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"

// 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 é declarado no cabeçalho e pode ser usado em qualquer lugar. No entanto, square é marcado como static, portanto existe apenas em 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 enquanto você usa internamente a lógica auxiliar de que precisar.

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 guardas usando o símbolo DISTANCE_H.
  • distance.c: seu arquivo-fonte contendo a implementação. Crie uma função auxiliar static chamada square que recebe um inteiro e retorna seu quadrado. Essa função auxiliar deve ser visível apenas dentro de 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 como estática, você oculta 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

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
    // and print the result in the format: "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