Menu
Coddy logo textTech

Statische Funktionen

Teil des Abschnitts Objektorientierte Programmierung der C-Journey von Coddy. Lektion 4 von 61.

Wenn du Code auf mehrere Dateien aufteilst, ist jede in einer Quelldatei definierte Funktion standardmäßig für andere Dateien sichtbar. Manchmal benötigst du jedoch Hilfsfunktionen, die nur intern verwendet werden sollen: Funktionen, auf die andere Dateien weder zugreifen noch von denen sie überhaupt wissen sollten.

Das Schlüsselwort static beschränkt, wenn es auf eine Funktion angewendet wird, deren Sichtbarkeit auf die Datei, in der sie definiert ist. Dadurch entsteht eine private Funktion, die nicht aus anderen Quelldateien aufgerufen werden kann, selbst wenn jemand versucht, sie zu deklarieren.

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

// Privater Helfer – nur in dieser Datei sichtbar
static int square(int x) {
    return x * x;
}

// Öffentliche Funktion – kann von main.c aufgerufen werden
int sum_of_squares(int a, int b) {
    return square(a) + square(b);
}

In diesem Beispiel wird sum_of_squares im Header deklariert und kann überall verwendet werden. square ist jedoch als static gekennzeichnet und existiert daher nur innerhalb von math_utils.c. Wenn main.c versucht, square() direkt aufzurufen, erzeugt der Linker einen Fehler: Die Funktion existiert außerhalb ihrer Datei einfach nicht.

So erreicht C Kapselung auf Dateiebene. Statische Funktionen ermöglichen es dir, Implementierungsdetails zu verbergen und deine öffentliche Schnittstelle übersichtlich zu halten, während du intern beliebige benötigte Hilfslogik verwendest.

challenge icon

Aufgabe

Einfach

Erstelle einen Distanzrechner, der eine private Hilfsfunktion verwendet, um das Quadrat einer Zahl zu berechnen – ein Detail, das vor dem restlichen Programm verborgen bleiben sollte.

Du erstellst drei Dateien:

  • distance.h: Deine Headerdatei, die eine einzelne öffentliche Funktion distance_squared deklariert. Diese nimmt vier Ganzzahlen (x1, y1, x2, y2), die zwei Punkte darstellen, und gibt eine Ganzzahl zurück. Verwende Include-Guards mit dem Symbol DISTANCE_H.
  • distance.c: Deine Quelldatei, die die Implementierung enthält. Erstelle eine static-Hilfsfunktion namens square, die eine Ganzzahl entgegennimmt und deren Quadrat zurückgibt. Diese Hilfsfunktion sollte nur innerhalb von distance.c sichtbar sein. Implementiere anschließend distance_squared mithilfe deiner statischen Hilfsfunktion, um (x2-x1)² + (y2-y1)² zu berechnen.
  • main.c: Deine Hauptdatei, die den Header einbindet und die öffentliche Funktion verwendet. Die Hilfsfunktion square sollte hier nicht zugänglich sein: Nur distance_squared ist verfügbar.

Die Funktion distance_squared berechnet die quadrierte euklidische Distanz zwischen zwei Punkten. Indem du die Funktion square als static definierst, verbirgst du dieses Implementierungsdetail vor jedem Code außerhalb von distance.c.

Du erhältst vier Ganzzahlen als Eingabe: x1, y1, x2 und y2.

Gib die quadrierte Distanz in diesem Format aus:

Squared distance: {result}

Bei den Punkten (0, 0) und (3, 4) würde die Ausgabe beispielsweise so aussehen:

Squared distance: 25

Probier es selbst

#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: Rufe distance_squared mit den Eingabekoordinaten auf
    // and print the result in the format: "Squared distance: {result}"
    
    return 0;
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-C-Compiler