wie kann ich einen #include verbieten



  • z.B. #include "myClass.h" (head zu eine C Inplementation)
    es soll nicht hier includiert werden, aber falls der 2. Programmierer das nicht wusst.Der includiert die Datei, dann alle Funktionen sind für ihn public, das soll eben nicht passieren.



  • was nicht für alle public sein darf, darf nicht für alle public gemacht werden.



  • machen wir es realistisch:
    core.h core.c, die beiden sind in C geschrieben,
    nehmen wir wieder an, man habe das interface nicht so richtig implementiert
    //interface.hxx
    #include "core.h"

    jetzt kommt die Überraschung, wenn ich in meinem GUI Programm #interface.hxx includiere, dann habe ich eigentlich auch Zugriff auf die Funktionen, die in core.h definiert sind.



  • Wenn du nicht willst dass durch #include "interface.hxx" auch Funktionen oder Klassen aus "core.h" sichtbar werden dann darfst du "core.h" nicht includieren. Funktion aus "core.h" brauchst du sowieso nicht in "interface.hxx" ( ausser du willst inline Funktionen, das geht dann eben nicht ). Klassen und Strukturen kannst du auch forward declarieren. Du kannst dann eben nur Pointer und Referenzen auf Klassen aus "core.h" verwenden.
    Wenns gar nicht anders geht kannst du den Header "core.h" auch noch aufteilen in einen öffentlichen und einen privaten Teil.
    Kurt



  • ZuK schrieb:

    Wenn du nicht willst dass durch #include "interface.hxx" auch Funktionen oder Klassen aus "core.h" sichtbar werden dann darfst du "core.h" nicht includieren. Funktion aus "core.h" brauchst du sowieso nicht in "interface.hxx" ( ausser du willst inline Funktionen, das geht dann eben nicht ). Klassen und Strukturen kannst du auch forward declarieren. Du kannst dann eben nur Pointer und Referenzen auf Klassen aus "core.h" verwenden.
    Wenns gar nicht anders geht kannst du den Header "core.h" auch noch aufteilen in einen öffentlichen und einen privaten Teil.
    Kurt

    sag mal welcher Teil in C ist private?
    core.h ist ein header von C und wie kann man eine C Funktion vorwärtsdeklarieren?



  • netrobot schrieb:

    sag mal welcher Teil in C ist private?

    Wirklich privat gibt's in C nicht, aber static Funktionen im core.c kommen dem schon recht nahe.

    wie kann man eine C Funktion vorwärtsdeklarieren?

    Indem du statt des Funktionsrumpfes ein Semikolon setzt:

    //Funktion:
    void print(std::string data)
    {
      ...
    }
    
    //zugehörige forward-Deklaration (Prototyp):
    void print(std::string);
    

Anmelden zum Antworten