Menu
CoddyTech

Include Guards

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

Wenn eine Headerdatei in einem Projekt mehrfach eingebunden wird, sieht der Compiler dieselben Deklarationen wiederholt, was zu Fehlern führt. Das passiert 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äprozessordirektiven, um sicherzustellen, dass der Inhalt einer Headerdatei 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. Wenn das nicht der Fall ist, 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 Einbinden dieser Header-Datei ist MATH_UTILS_H bereits definiert, daher wird der gesamte Block übersprungen. Der Name der Include-Guard-Konstante entspricht typischerweise dem Dateinamen in Großbuchstaben, wobei Punkte und Sonderzeichen durch Unterstriche ersetzt werden.

Jede Header-Datei, die du erstellst, sollte Include-Guards haben. Das ist eine gängige Praxis, die Kompilierungsfehler verhindert und dafür sorgt, dass dein Code überall in deinem Projekt sicher eingebunden werden kann.

challenge icon

Aufgabe

Einfach

Lass uns eine Header-Datei vor mehrfacher Einbindung schützen, indem wir Include-Guards hinzufügen. Du baust auf dem Begrüßungsprogramm aus der vorherigen Lektion auf, stellst diesmal aber sicher, dass die Header-Datei mehrfach sicher 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 und verwendest dafür das Symbol 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 Parameter vom Typ const char* für den Namen entgegennehmen 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 im obigen Format gezeigt aus und ersetze dabei Alice durch den angegebenen Namen.

Probier es selbst

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

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

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