Vorteil von typedef ggü. #define in C++



  • Hallo!

    Welchen konkreten Vorteil bringt in dem Fall ein typedef?

    #define DatenTyp_VXX DatenTyp_V7
    vs.
    typedef DatenTyp_V7 DatenTyp_VXX;

    bzw. gibt es überhaupt einen Vorteil?



  • blablablubb schrieb:

    Welchen konkreten Vorteil bringt in dem Fall ein typedef?

    - Bessere Fehlermeldungen
    - Fehler falls irgendjemand eine Klasse mit dem gleichen Namen definieren will
    - Ist echter Name im Namespace
    - Google ...



  • #define ist oft scheiße.
    Bei typedef wird ein richtiger Name erstellt, mit namespace und allem.



  • Zusätzlich:
    Die IDE unterstützt Dich bei #define vermutlich auch nicht mit Anmerkungen zu Methoden und Attributen o.ä.

    Gibt auch viele Fallstricke:

    typedef int* IntPointer;
    #define DangerousIntPointer int*
    
    DangerousIntPointer a, b, c; // nur a ist Pointer
    

    Und man man kann Funktionszeiger mit #define nicht gescheit basteln.

    Und die Namenskollisionen können ziemliche Probleme bereiten. Wenn man im template beispielsweise typedef T value_type; durch #define value_type T ersetzt, na dann viel Spaß... 🙂



  • Am wichtigsten ist wohl der Scope. typedef erzeugt ein dem Compiler bekanntes Symbol (im Gegensatz zu reiner Textersetzung) und kann in lokaleren Gültigkeitsbereichen neu definiert werden, ohne Konflikte zu erzeugen.


Anmelden zum Antworten