Menu
Coddy logo textTech

Funkcje statyczne

Część sekcji Programowanie obiektowe ścieżki C w Coddy. Lekcja 4 z 61.

Gdy dzielisz kod na wiele plików, każda funkcja zdefiniowana w pliku źródłowym jest domyślnie widoczna dla innych plików. Czasami jednak potrzebujesz funkcji pomocniczych, które powinny być używane tylko wewnętrznie: funkcji, do których inne pliki nie powinny mieć dostępu ani nawet o nich wiedzieć.

Słowo kluczowe static, zastosowane do funkcji, ogranicza jej widoczność do pliku, w którym została zdefiniowana. Tworzy to prywatną funkcję, której nie można wywołać z innych plików źródłowych, nawet jeśli ktoś spróbuje ją zadeklarować.

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

// Prywatna funkcja pomocnicza – widoczna tylko w tym pliku
static int square(int x) {
    return x * x;
}

// Funkcja publiczna – można ją wywołać z main.c
int sum_of_squares(int a, int b) {
    return square(a) + square(b);
}

W tym przykładzie sum_of_squares jest zadeklarowana w pliku nagłówkowym i może być używana wszędzie. Jednak square jest oznaczona jako static, więc istnieje tylko w pliku math_utils.c. Jeśli main.c spróbuje bezpośrednio wywołać square(), linker zgłosi błąd: ta funkcja po prostu nie istnieje poza swoim plikiem.

To sposób języka C na osiąganie enkapsulacji na poziomie pliku. Funkcje statyczne pozwalają ukrywać szczegóły implementacji i utrzymywać czysty interfejs publiczny, a jednocześnie korzystać z dowolnej logiki pomocniczej, której potrzebujesz wewnętrznie.

challenge icon

Wyzwanie

Łatwy

Zbudujmy kalkulator odległości, który używa prywatnej funkcji pomocniczej do obliczania kwadratu liczby — szczegółu, który powinien pozostać ukryty przed resztą programu.

Utworzysz trzy pliki:

  • distance.h: plik nagłówkowy deklarujący jedną publiczną funkcję distance_squared, która przyjmuje cztery liczby całkowite (x1, y1, x2, y2) reprezentujące dwa punkty i zwraca liczbę całkowitą. Dodaj strażniki nagłówka używające symbolu DISTANCE_H.
  • distance.c: plik źródłowy zawierający implementację. Utwórz statyczną funkcję pomocniczą o nazwie square, która przyjmuje liczbę całkowitą i zwraca jej kwadrat. Ta funkcja pomocnicza powinna być widoczna tylko w obrębie distance.c. Następnie zaimplementuj distance_squared, używając swojej statycznej funkcji pomocniczej do obliczenia (x2-x1)² + (y2-y1)².
  • main.c: główny plik, który dołącza plik nagłówkowy i używa publicznej funkcji. Funkcja pomocnicza square nie powinna być tutaj dostępna — dostępna jest tylko funkcja distance_squared.

Funkcja distance_squared oblicza kwadrat odległości euklidesowej między dwoma punktami. Dzięki oznaczeniu funkcji square jako statycznej ukrywasz ten szczegół implementacji przed kodem spoza distance.c.

Otrzymasz cztery liczby całkowite jako dane wejściowe: x1, y1, x2 i y2.

Wypisz kwadrat odległości w tym formacie:

Squared distance: {result}

Na przykład dla punktów (0, 0) i (3, 4) wynik będzie następujący:

Squared distance: 25

Spróbuj swoich sił

#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: Wywołaj distance_squared z wczytanymi współrzędnymi
    // i wypisz wynik w formacie: "Squared distance: {result}"
    
    return 0;
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator C online