include-Wächter!!?



  • was ist eine include-Wächter?
    könntet ihr mir ein Beispiel geben oder ein verweis auf Tutorial.
    Danke



  • Damit wird verhindert das du Include Dateien mehrfach einbindest, etwa so :

    steht dann im Headerfile drinn(z.b. myheader.h :

    #ifndef _MY_HEADER_H
    #define _MY_HEADER_H
    
    // ganz viel Code
    
    #endif
    

    Ich denke so sollte das sein. Indem du in deinem Headerfile den Code so umschliesst verhinderst du das er öfter eingebunden wird als nötig.



  • braucht man damit etwas nicht zweimal defniert oda deklariert.
    und des funkt so
    exports müsse

    //in vc
    #pragma once
    //normal
    #ifndef _FUNKTHEADER_H_
    #define _FUNKTHEADER_H_
    //...dekleration
    //...definitionen
    #endif /*_FUNKTHEADER_H_*/
    //...exports
    

    mfg



  • beim includieren von headerfiles wird der code des headers an die stelle kopiert. damit das nicht mehrmals geschieht gibt es ein define. wenn die schon "gesetzt" ist, wird das headerfile nicht nochmal rein kopiert.

    Sinn:
    es kann ja sein das du mehere headerfiles inkludierst und in einem headerfile inkludierst du das andere auch noch



  • Und die Namen der Include Wächter dürfen alle nicht mit _ beginnen, wie es hier der Fall ist. Diese Namen sind für den Programmierer tabu. Ein FUNKTHEADER_H_ oder MY_HEADER_H reicht auch.



  • ok Danke für alle. ich hab´s kapiert.
    Ponto schrieb:

    Und die Namen der Include Wächter dürfen alle nicht mit _ beginnen, wie es hier der Fall ist. Diese Namen sind für den Programmierer tabu
    

    wieso? hast du dafür eine Begründung!?



  • bia schrieb:

    ok Danke für alle. ich hab´s kapiert.
    Ponto schrieb:
    ...
    wieso? hast du dafür eine Begründung!?

    Direkt aus dem Standard §17.4.3.1.2:

    Certain sets of names and function signatures are always reserved to the implementation:

    Each name that contains a double underscore (_ _) or begins with an underscore followed by an uppercase letter (2.11) is reserved to the implementation for any use.

    Each name that begins with an underscore is reserved to the implementation for use as a name in the global namespace.



  • ein double underscore sieht für mich aber so aus: __FUNKTHEADER_H_ und das lässt der combiler (VC6) IMO gar nicht erst zu.



  • stefan2500 schrieb:

    ein double underscore sieht für mich aber so aus: __FUNKTHEADER_H_ und das lässt der combiler (VC6) IMO gar nicht erst zu.

    Das Leerzeichen steht da nur, um zu verdeutlichen, dass es sich um zwei Unterstriche handelt.



  • Wenn man einfach gemäß Konvention den Großgeschriebenen Dateinamen verwendet, sollte man erst gar nicht das Problem haben, dass der Wächter mit _ beginnt:

    also

    #ifndef MYHEADER_H
    #define MYHEADER_H
    #include "myheader.h"
    #endif
    

Anmelden zum Antworten