hübsche anwendung von #define



  • Einigen wir uns einfach darauf, dass das Makro scheiße ist. 😃



  • Jo, klassische Fehler beim Umgang mit Makros... Auch sowas wird immer gerne gesehen:

    #define FOO(x) x + x
    
    // ...
    
    int foobar = FOO(x) * bar;
    


  • Das man define vermeiden sollte steht schon in Effektiv C++ programmieren. Unter anderem weil es sehr fehleranfällig ist (wie ein paar Posts vorher schon erwähnt).
    Ich hab auch schon von Leuten gehört die { und } durch Begin / End ersetzt haben... so etwas ist arm, vor allem für nachfolgende Programmierer, die werden sich über so einen Mist freuen. 🙄



  • groovemaster schrieb:

    Mr. N schrieb:

    #define self (*this)
    

    gefällt mir sogar recht gut. jedes * im code stört das auge 🙂

    Und was machst du, wenn du die Adresse der Instanz brauchst? Stört der Adress Operator dann nicht genauso oder nimmst du dann einfach wieder this? 🙂

    Also & stört mich weniger, allerdings ja dann nehme ich wieder this.

    groovemaster schrieb:

    Schön find ich auch sowas

    #define SAFE_DELETE(x) delete x; x = NULL
    

    Sollte es etwa nicht egal sein, ob sich ein Programm beim dereferenzieren eines Nullzeigers oder eines Zeigers auf eine ungültige Adresse erhängt? 😃

    😮 Naja über Schöhnheit kann man bekanntlich streiten. Jedenfals hast du dir als du das geschrieben hast keine Gedanken über Sicherheit gemacht und ob es mit Templates nicht besser geht:

    template<class T>
    inline void SafeDelete(T*&t)
    {
      delete t;
      t=NULL;
    }
    

    Hörte mal Leute die Argument gegen Makros die ihr hier anführt sind ja wohl sowas von Schwachsinn. Dass man sich das Genick bricht wenn man Anfängerfehler Numero Uno begeht ist doch wohl klar und, dass Makros keine Funktionen erstetzen auch.



  • Hörte mal Leute die Argument gegen Makros die ihr hier anführt sind ja wohl sowas von Schwachsinn. Dass man sich das Genick bricht wenn man Anfängerfehler Numero Uno begeht ist doch wohl klar und, dass Makros keine Funktionen erstetzen auch.

    dann such dir ne ernsthafte diskussion über define raus, da haben die gleichen leute, die jetzt grinsend irgendwas von sich gegeben haben, richtig argumentiert.
    Dies ist ein Trollthread, mehr nicht,also wieso sich über Posts gedanken machen? 😉



  • Ben04 schrieb:

    Hörte mal Leute die Argument gegen Makros die ihr hier anführt sind ja wohl sowas von Schwachsinn. Dass man sich das Genick bricht wenn man Anfängerfehler Numero Uno begeht ist doch wohl klar und, dass Makros keine Funktionen erstetzen auch.

    Damit willst du uns was sagen? Der Gag ist ja, dass bisher kein einziges Argument gegen Makros im Allgmeinen gefallen ist, nur gegen die, die bisher gepostet sind. 🙂

    Es wird dir natürlich auch nicht so schnell gelingen, ein sinnvolles Makro zu posten, außer es handelt sich um ein Include-Guard. 😉 Was anscheinend noch recht beliebt ist, sind Makros zum loggen inkl. Variablenname. Ich persönlich habe für sowas keine Verwenung, aber zumindest ist das nicht etwas, was man durch andere Sprachmittel ersetzen kann, daher okay.



  • Ben04 schrieb:

    Jedenfals hast du dir als du das geschrieben hast keine Gedanken über Sicherheit gemacht und ob es mit Templates nicht besser geht:

    template<class T>
    inline void SafeDelete(T*&t)
    {
      delete t;
      t=NULL;
    }
    

    Wenn man sowas schon braucht, dann wäre es IMHO schöner noch ein ASSERT reinzubasteln. Kost' ja nix.

    template<class T>
    inline void SafeDelete(T*& t)
    {
      ASSERT(t);
      delete t;
      t = 0;
    }
    


  • Man darf doch 0-Zeiger löschen. An manchen Stellen kann man das durchaus auch mal nutzen, so dass es nicht immer ein Hinweis auf einen Fehler ist.
    btw. ich kapier euer "T*&" nicht. 😉 :p 🤡



  • Optimizer schrieb:

    Man darf doch 0-Zeiger löschen. An manchen Stellen kann man das durchaus auch mal nutzen, so dass es nicht immer ein Hinweis auf einen Fehler ist.

    Kann man geteilter Meinung drüber sein. Ich halte es in 90% der Fälle für ein unbeabsichtigtes Verhalten wenn man ein delete auf einen Nullpointer macht. Dann würde ich gerne darauf aufmerksam gemacht werden.

    Optimizer schrieb:

    btw. ich kapier euer "T*&" nicht. 😉 :p 🤡

    Du willst ja den Zeiger auf 0 setzen, nicht bloß eine Kopie.



  • Das man define vermeiden sollte steht schon in Effektiv C++ programmieren.

    Also für mich ist der mächtige Präprozessor mit den DEFINEs einer der Gründe, wieso C++ meine Lieblingssprache ist 🙂



  • Ja, es ist immer wieder aufs neue eine Herausforderung weitestgehend auf den preprocessor zu verzichten :p .



  • Es wird dir natürlich auch nicht so schnell gelingen, ein sinnvolles Makro zu posten, außer es handelt sich um ein Include-Guard. Was anscheinend noch recht beliebt ist, sind Makros zum loggen inkl. Variablenname. Ich persönlich habe für sowas keine Verwenung, aber zumindest ist das nicht etwas, was man durch andere Sprachmittel ersetzen kann, daher okay.

    Was ist mit bedingter Compilierung? Auf manchen Plattformen so, auf anderen so?



  • MaSTaH schrieb:

    Optimizer schrieb:

    btw. ich kapier euer "T*&" nicht. 😉 :p 🤡

    Du willst ja den Zeiger auf 0 setzen, nicht bloß eine Kopie.

    Da würds ein T& auch tun. 😉



  • Optimizer schrieb:

    Ich nicht, weil du so sauberen Ärger bekommst, wenn du das nicht in einem Block zusammenfasst

    Ben04 schrieb:

    Naja über Schöhnheit kann man bekanntlich streiten. Jedenfals hast du dir als du das geschrieben hast keine Gedanken über Sicherheit gemacht und ob es mit Templates nicht besser geht

    Sry, aber hab ich etwa die Ironie Tags vergessen? Vielleicht sollte ich es nochmal explizit erwähnen. 🙄



  • Optimizer schrieb:

    MaSTaH schrieb:

    Optimizer schrieb:

    btw. ich kapier euer "T*&" nicht. 😉 :p 🤡

    Du willst ja den Zeiger auf 0 setzen, nicht bloß eine Kopie.

    Da würds ein T& auch tun. 😉

    So finde ich es aber schöner 😉 .


Anmelden zum Antworten