"Aktivieren" ifdef in einer lib?



  • Hallo zusammen,

    in einer lib steht zb. soetwas:

    #ifdef __cplusplus
    extern "C" {
    #endif
    

    Ich will zb. das es nun benutzt wird, was soll ich machen?
    Einfach ein #define in meiner main whr nicht?

    Danke Gruß



  • testmor schrieb:

    in einer lib steht zb. soetwas:

    Nein, in einem Header

    testmor schrieb:

    Ich will zb. das es nun benutzt wird, was soll ich machen?

    Ein C++ Programm schreiben, das den Header benutzt. Nichts weiter.



  • __cplusplus ist immer definiert (wenn der Compiler im C++-Modus ist).



  • Danke für die schnellen Antworten.

    🙂 natürlich in einem Header von der lib.
    Aber allgemein, es gibt dort auch andere Dinge wie zb.:

    #ifndef "NEW_"
    ...
    #else
    ...
    #endif
    

    das "NEW_" scheint aber nicht definiert zu sein und ich kann deshalb den Abschnitt nicht benutzen zu können, wie kriege ich den es nun hin das ich es nutzen kann?

    Und beim ersten Beispiel

    #ifdef __cplusplus
    extern "C" {
    #endif
    

    Wo wird dann das define gesetzt im Code? Wenn ich nichts weiter machen muss

    Danke!



  • __cplusplus ist bei jedem C++ Compiler implizit definiert, das muss nirgends #defined werden.
    Und wenns ein C Compiler ist, dann ist das extern "C" da auch nicht nötig.
    Du musst dich also um gar nix kümmern.

    Was das NEW_ angeht: das wird schon seinen Sinn haben dass der Teil über das #ifden "ausgeblendet" wird. z.B. weil der darin enthaltene Code nur funktioniert, auf Systemen wo NEW_ eben definiert ist.

    ODER es kann ein Config-Switch der Library sein. Das stünde dann in der Doku der Library beschreiben.



  • Jo vielen Dank



  • Mhm doch noch eine Frage, wenn ich zb. eine lib schreiben würde woher weiß ich dann welche defines der compiler oder das System setzt?

    Danke Gruß



  • Wenige Makros werden vom Standard vorgeschrieben, der Rest steht in der Dokumentation deines Compilers.


  • Mod

    Außerdem gibt es eine Reihe reservierter Bezeichner, die du selber nicht verwenden solltest, eben weil die Implementierung eventuell irgendwelche Makros oder sonstwelche Objekte so nennen kann. Die Regeln (aus dem Kopf zitiert, hoffentlich richtig 🙂 ):
    Überall reserviert:
    -Fängt mit Unterstrich gefolgt von Großbuchstaben an
    -Oder enthält einen doppelten Unterstrich

    Im globalen Namensbereich reserviert:
    -Fängt mit Unterstrich an

    Daraus folgt die Faustregel, die alles überall trifft:
    -Kein Unterstrich am Anfang und keine doppelten Unterstriche!



  • testmor schrieb:

    Aber allgemein, es gibt dort auch andere Dinge wie zb.:

    #ifndef "NEW_"
    ...
    #else
    ...
    #endif
    

    Ganz allgemein: Kümmer dich erstmal nicht drum, die defines haben so ihren Sinn und sind nicht dazu gedacht, dass du diese von Hand definierst.

    Besonders wenn du fehlerhafte Beispiele bringst.


Log in to reply