ifndef ... endif



  • Hi,

    In meinem Lernbuch steht eine Erklärung für das Makro

    ifndef ... endif

    include-guards, die das mehrfache Einschließen von Header-Dateien und damit die
    Mehrfachdeklaration von Funktionen, Klassen oder Variablen verhindern.

    Immerhin verstehe ich nicht ganz. Kann mir jemand aufklären, was diese Struktur eigentlich beschreibt:

    #ifndef HEADER_H
    #define HEADER_H
    // declarations
    #endif

    MfG
    Sommer



  • damit wird sichergestellt, dass alles zwischen dem #ifndef\#define und dem #endif nur einmal inkludiert wird.

    wenn naemlich manches mehrmals inkludiert wird, dann hat das kaputten code zur folge.



  • mit anderen worten:

    #ifndef guckt ob die nachstehende konstante (hier HEADER_H) schon definiert wurde. wenn nicht, wird alles ausgeführt, was zwischen #ifndef und #endif steht. Dabei werden dann deine Functions deklariert und structs definiert und was du sonst noch alles im header machst. Der compiler merkt sich jetzt, dass er HEADER_H kennt und das nächste mal, wenn er zu diesem #ifndef HEADER_H kommt merkt er, aha, kenn ich schon, also überspring ich alles nachfolgende bis zum #endif. Jetzt nochmal zur Frage, warum man das macht:

    Mit einer Anweisung #include "header.h" in einer *.c-datei sorgt man letztenendes dafür, dass statt #include "header.h" der gesamte inhalt der header.h an dieser stelle eingefügt wird. Damit stehen dann beispielsweise die Funktions-Deklarationen wieder oben im Code und sind dem Compiler bekannt, wenn er auf die Funktionen selbst im Code trifft, bzw. auf Aufrufe dieser Funktionen. Spätestens bei grösseren Projekten wird man aber vielleicht die header.h in 2 verschiedenen *.c files verwenden. Und da muss man dann verhindern, dass header.h 2x eingefügt wird, sonst gibts Compiler-Errors, wie *** already defined in *** ...



  • Danke.

    Sommer


Anmelden zum Antworten