#define



  • das war nur ein Beispiel, natürlich ist es einfacher zu machen, wie Ihr geschrieben habt, wenn es wirklich so ist, aber ich habe andere Sachen in meinem Programm, wie z.b: DEFAULT_BLABLA oder ähnliches, und es ist mir lieber sie oben mit
    #define
    zu definieren.

    Ich bin immer bereit etwas neues zu lernen. Warum genau war es nochmal einfach #define zu verwenden, als eine globale (am besten modul-lokale) Konstante zu verwenden?



  • vermutlich ist mnab ein Ex-C-Coder...;)



  • also große Vorteile gibt's nicht außer daß es vielleicht schöner so ist, ich weiß es nicht, aber es wird oft so gemacht:

    #define DEFAULT_PORT bla
    #define IRGENDWAS BLABLA
    

    und so weiter. Ich hab aber mehrmals gelesen, daß man auf die "define" verzichten sollte, da es für den Compiler nicht so toll ist.

    Grüße,
    mn



  • Och, dem Compiler macht es nichts aus. Das Problem ist, dass er wild drauf los ersetzt und auch mal stören könnte. Defines sollte man nur benutzen wenn es sonst in C++ nicht zu machen ist, wie z.B. #include-Guards oder irgendwas Compilerspezifisches. Es gibt genug Alternativen, wie z.B.: inline-Funktionen, templates und const. Ich habe früher auch für Konstanten und kurze Funktionen das #define benutzt (weil ich mit C angefangen habe), bin aber inzwischen vollständig auf die sehr guten Alternativen von C++ umgestiegen.



  • Hallo.

    Ich hab aber mehrmals gelesen, daß man auf die "define" verzichten sollte, da es für den Compiler nicht so toll ist.

    Der Compiler hat damit nicht viel am Hut.

    #define ALTER 3
    cout << ALTER;
    

    #define ist eine Präprozessor-Direktive, und ledliglich eine String-Ersetzung.
    Man weißt den Präprozessor also an, alle vorkommen des Strings 'ALTER' gegen 3 auszutauschen.
    Ich gehe sogar so weit zu behaupten, dass die #define-Anweisung in der vom Präprozessor produzierten Zwischendatei "futsch" ist. Übrigens führt #define keine Typenprüfung durch.

    BodPa



  • also große Vorteile gibt's nicht außer daß es vielleicht schöner so ist, ich weiß es nicht

    Also ich weiß nicht, ob ein

    #define foo bar
    

    schöner ist, als ein

    const Typ foo = bar;
    

    Aber kommt es beim Programmieren wirklich auf die Schönheit an?



  • Ja. Aber das Tolle ist wohl, dass #define und const sich so verdammt ähnlich verhalten. Siehe auch

    #include <ctime>
    #define foo1 std::time(0)
    time_t const foo2 = std::time(0);
    

    Kopfschüttelnd.



  • @Danial E.: cih bezog mich eher auf Beispiele wie

    #define ALTER 3
    cout << ALTER;
    

    (Ich will hiermit nicht den Author dieses Beispiels persönlich angreifen)

    Das Makros etwas anderes als Konstanten sind ist mir sehr wohl bewusst. Entschuldige, das das falsch rübergekommen ist.



  • Irren ist menschlich.

    Übrigens, Helium, kennst du noch einen "N-Fighter"? Das bin ich ;).



  • Klar kenn ich dich noch.


Anmelden zum Antworten