[Gelöst] Preprocessor Header Datei: #ifndef - #define - #endif



  • Also HarteWare fragte: "Kann man mit Include-Guards gegenseitiges inkludieren verhindern?"
    Ich antwortete: "Ja; in sauberen Headerstrukturen wird jedoch nicht gegenseitig inkludiert."
    Du: "Nicht wahr, sonst bräuchte es da gar keine Include-Guards." (Hab ich das hier falsch verstanden?)
    Ich: Erklärung, wieso es Include-Guards auch ohne gegenseitiges Inkludieren braucht.
    Du: "Von gegenseitigem Inkludieren war nicht die Rede." (Dabei sagte ich doch, dass "saubere" Headerstrukturen kein gegenseitiges Inkludieren durchführen)

    Kann ich nicht ganz nachvollziehen.



  • asfdlol schrieb:

    Also HarteWare fragte: "Kann man mit Include-Guards gegenseitiges inkludieren verhindern?"

    Ja? Wo?



  • manni66 schrieb:

    asfdlol schrieb:

    Also HarteWare fragte: "Kann man mit Include-Guards gegenseitiges inkludieren verhindern?"

    Ja? Wo?

    Im OP?

    HarteWare schrieb:

    Oder bringt es, dass wenn ich headerB.h habe, welcher header.h includiert und ich dann headerB.h und header.h includiere, der Inhalt von header.h nicht zwei Mal includiert wird? (Was eventuell auf Ersteres schließt)



  • asfdlol schrieb:

    manni66 schrieb:

    asfdlol schrieb:

    Also HarteWare fragte: "Kann man mit Include-Guards gegenseitiges inkludieren verhindern?"

    Ja? Wo?

    Im OP?

    HarteWare schrieb:

    Oder bringt es, dass wenn ich headerB.h habe, welcher header.h includiert und ich dann headerB.h und header.h includiere, der Inhalt von header.h nicht zwei Mal includiert wird? (Was eventuell auf Ersteres schließt)

    Nein



  • asfdlol schrieb:

    manni66 schrieb:

    asfdlol schrieb:

    Also HarteWare fragte: "Kann man mit Include-Guards gegenseitiges inkludieren verhindern?"

    Ja? Wo?

    Im OP?

    HarteWare schrieb:

    Oder bringt es, dass wenn ich headerB.h habe, welcher header.h includiert und ich dann headerB.h und header.h includiere, der Inhalt von header.h nicht zwei Mal includiert wird? (Was eventuell auf Ersteres schließt)

    Nein, der TE hat wohl hiernach gefragt:
    headerB.h:

    #include "header.h"
    ...
    

    header.h:

    ...
    

    main.cpp:

    #include "header.h"
    #include "headerB.h"
    ...
    


  • Hoppla, ja, ergibt viel mehr Sinn, sorry an alle.



  • Alternativ kann man auch

    #pragma once
    

    benutzen.. oder

    #import
    

    statt

    #include
    

    .

    Aber die Include-Guards sind die gängigste Variante.



  • oenone schrieb:

    Alternativ kann man auch

    #pragma once
    

    benutzen.. oder

    #import
    

    statt

    #include
    

    .

    Aber die Include-Guards sind die gängigste Variante.

    AFAIK sind sie die einzige Standard konforme Variante.



  • oenone schrieb:

    Alternativ kann man auch

    #pragma once
    

    benutzen..

    Besser, man benutzt es ergänzend:

    #ifndef bla
    #define bla
    #pragma once
    …
    #endif
    

    Compiler müssen pragmas, die sie nicht kennen, ohne Fehler durchlassen. Das zusätzliche #pragma once kann also auf Compilern, die include-guards nicht so schlau wie GCC erkennen, die Sache beschleunigen.

    oenone schrieb:

    oder

    #import
    

    statt

    #include
    

    .

    Ich fürchte, das geht auf GCC aber nicht auf MSVC. Außerdem soll der Verwender nicht wissen müssen, ob der Header nur einmal rein darf und soll. Ganz schlechtes Design das.



  • volkard schrieb:

    oenone schrieb:

    oder

    #import
    

    statt

    #include
    

    .

    Ich fürchte, das geht auf GCC aber nicht auf MSVC. Außerdem soll der Verwender nicht wissen müssen, ob der Header nur einmal rein darf und soll. Ganz schlechtes Design das.

    Ja, import ist eher bei Objective-C üblich. Da GCC die Sprache auch unterstützt, wurde es wohl auch für C und C++ übernommen.

    Bei MSVC hat import außerdem eine andere Bedeutung: http://msdn.microsoft.com/en-us/library/8etzzkb6.aspx


Anmelden zum Antworten