Header-File und dessen "Befehle"



  • Hallo, zusammen!

    Kann mir bitte jemand die Begriffe erklären:

    #ifndef _flaeche_h_
    #define _flaeche_h_ 1
    
    //hier stehn Unterprogrammprotypen structs etc., dies ein Header-File ist
    
    #endif
    

    Was machen die 3 Befehle? Kann mir einer das erklären bitte?

    mfg mr man



  • Das sind Include Guards.



  • #ifndef steht für if not defined und prüft on das nachfolgende Makro schon definiert wurde. Wenn es noch nicht definiert wurde wird alles bis zum dazugehörigen #endif bzw #else übernommen.

    #define definiert ein Makro. Überall wo im C-Quelltext dieses Makro erscheint, wird es ersetzt durch den Text dahinter. Ausnahme sind Stringliterale (Text zwischen ".

    #endif schließt das #ifndef ab.

    Der Zweck hier liegt darin, dass Definitionen nicht doppelt abgearbeitet werden, wenn das Header-File mehrmals eingebunden wird.



  • #define _flaeche_h_ 1
    

    Diese Zeile ist denkbar schlecht.
    Namen, die mit Unterstrich beginnen sind in C reserviert (also quasi verboten) und das dahinter 1 ist nicht notwendig.
    Ausserdem schreibt man Makros konsistenterweise immer mit Grossbuchstaben.

    Ich schreib das immer so:

    #define FLAECHE_H__
    


  • nooneindef schrieb:

    Ich schreib das immer so:

    #define FLAECHE_H__
    

    Sind nicht auch alle Bezeichner, die '__' beinhalten, reserviert?



  • Gugelmoser schrieb:

    nooneindef schrieb:

    Ich schreib das immer so:

    #define FLAECHE_H__
    

    Sind nicht auch alle Bezeichner, die '__' beinhalten, reserviert?

    Soweit mir das bekannt ist, geht es nur um den Anfang des Bezeichners. Was am Ende steht ist also egal. Trotzdem finde ich die nachfolgenden __ nicht schön 🙂



  • nooneindef schrieb:

    Diese Zeile ist denkbar schlecht.

    Von dem Makronamen bekommt der C-Compiler doch gar nichts mit.
    Wenn der Präprozessor mit dem Quelltext fertig ist, sind alle #... aus dem Code raus und alle Makros ersetzt.


Anmelden zum Antworten