Menu
Coddy logo textTech

Include Guards

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

Wenn eine Header-Datei mehrmals in ein Projekt eingebunden wird, sieht der Compiler dieselben Deklarationen wiederholt, was zu Fehlern führt. Dies geschieht häufig, wenn mehrere Dateien denselben Header einbinden oder wenn Header sich gegenseitig einbinden. Include-Guards lösen dieses Problem.

Eine Include-Guard verwendet drei Präprozessor-Direktiven, um sicherzustellen, dass der Inhalt eines Header-Files nur einmal verarbeitet wird:

// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H

int add(int a, int b);

#endif

So funktioniert es: #ifndef MATH_UTILS_H prüft, ob das Symbol MATH_UTILS_H noch nicht definiert wurde. Falls nicht, fährt der Präprozessor fort und definiert es sofort mit #define MATH_UTILS_H. Alles zwischen diesem Punkt und #endif wird in die Kompilierung einbezogen.

Beim zweiten Mal, wenn dieser Header eingebunden wird, ist MATH_UTILS_H bereits definiert, sodass der gesamte Block übersprungen wird. Der Name des Guards ist normalerweise der Dateiname in Großbuchstaben, wobei Punkte und Sonderzeichen durch Unterstriche ersetzt werden.

Jede Header-Datei, die du erstellst, sollte Include-Guards enthalten. Dies ist eine gängige Praxis, die Kompilierungsfehler verhindert und es sicher macht, deinen Code von überall in deinem Projekt einzubinden.

challenge icon

Aufgabe

Einfach

Schützen wir eine Header-Datei vor doppeltem Einbinden, indem wir Include-Guards hinzufügen. Du baust auf dem Begrüßungsprogramm aus der vorherigen Lektion auf, stellst diesmal jedoch sicher, dass der Header problemlos mehrfach eingebunden werden kann.

Du erstellst zwei Dateien:

  • greet.h: Deine Header-Datei mit der Funktionsdeklaration für greet. Diesmal umschließt du den gesamten Inhalt mit Include-Guards unter Verwendung des Symbols GREET_H.
  • main.c: Deine Hauptdatei, die den Header einbindet, die Funktion greet implementiert und sie von main() aus aufruft.

Die Funktion greet soll einen const char*-Parameter für den Namen akzeptieren und Folgendes ausgeben:

Hello, Alice!

Deine Header-Datei sollte dieser Struktur folgen:

#ifndef GREET_H
#define GREET_H

// function declaration here

#endif

Du erhältst eine Eingabe: einen Namen (String).

Gib die Begrüßungsnachricht genau wie oben im angegebenen Format aus und ersetze Alice durch den angegebenen Namen.

Probier es selbst

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

// TODO: Implementiere die greet-Funktion, die "Hello, <name>!" ausgibt

int main() {
    char name[100];
    scanf("%s", name);
    
    // TODO: Rufe die greet-Funktion mit name auf
    
    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