define vs. typedef



  • Hallo!

    Ist es richtig, dass man eher typedef als define für neue Typennamen hernehmen soll aus diesem Grund:
    Wenn man mit typedef einen Zeiger auf einen Datentypen definiert, z.B. typedef long* PLONG; so ist, wenn man bei der Var.def. dann schreibt PLONG v1,v2; beides vom Typ long*, während bei #define PLONG long* nur die erste Variable v1 vom Typ long* ist, während v2 vom Typ long wäre.
    Soweit so richtig?
    Spricht sonst noch was gegen define bei Typvereinbarungen?



  • ja.

    #define ist reine textersetzung. #define ist deshalb eher zu meiden wenn moeglich.

    denn #define macht dir aus jedem PLONG ein long*, auch wenn es keinen typenkontext hat 😉

    und der fall mit den zeigern hast du ja selber entdeckt.



  • harry3 schrieb:

    Spricht sonst noch was gegen define bei Typvereinbarungen?

    für typen taugt #define wirklich nix, aber sonst, für einfache sachen wie 'echte' konstanten oder trickreiche function-like makros sind manchmal ganz praktisch. kannst dir ja mal 'boost-preprocessor' anschauen. da werden #defines voll ausgereizt.
    🙂



  • d.h.

    #define long* PLONG
    int PLONGBONGDONG;
    

    interpertiert der comiler als

    int long*BONGDONG;
    

    ???

    und

    typedef long* PLONG;
    int PLONGBONGDONG;
    

    interpertiert der compiler trozdem als

    int PLONGBONGDONG;
    

    ???



  • BorisDieKlinge schrieb:

    d.h.

    #define long* PLONG
    int PLONGBONGDONG;
    

    interpertiert der comiler als

    int long*BONGDONG;
    

    ???

    Nein. Der Praeprozessor arbeitet auf Token-Basis, er wuerde also das PLONG in PLONGBONGDONG nicht finden.

    (Du meintest uebrigens bestimmt #define PLONG long*, andersherum funktioniert das eher nicht.)



  • ich meinte:

    //#define PLONG long*
    typedef long* PLONG;
    int main() {
      PLONG PLONG;
    }
    

Anmelden zum Antworten