2 kleine Q's



  • Hi zusammen 2 kleine Fragen:

    if(...)
            return (false);
        else
            if(...)
                return (false);
    

    1. Kann man das /\ so schreiben, oder muss ich runde Klammern setzen ?
    2. Gibt es ne Möglichkeit Makros in einem Namensbereich zu definieren ?

    vielen schönen danken füren antworten 😉 ... 😃



  • Gibt es ne Möglichkeit Makros in einem Namensbereich zu definieren ?

    Also wenn du meinst das ein bestimmtest Macro nur in einem bestimmten Namespace gültig ist, dann nein.
    Die erste Frage habe ich nicht verstanden.



  • 1. Du meinst wohl geschweifte Klammern, aber nein, die brauchst du nicht. (Übrigens brauchst du auch für return keine Klammern).
    2. Noch nicht, aber mit C++0x wird eh alles besser ;). Falls du das jetzt unbedingt brauchst, schau dir mal Boost.Wave an, das beherrscht mit den richtigen Parametern die sog. Regions.



  • jo meinte geschweifte Klammern ...vertippt

    das ich für return keine Klammern brauch, weiß ich, sieht aber -wie ich finde- schöner aus 😃 😃 ...

    Also kann ich statt der Makros nur (inline) Funktionen schreiben, die dem ja '''ähneln''' ....schade...

    ok danke!



  • Dr. Vogel schrieb:

    Also kann ich statt der Makros nur (inline) Funktionen schreiben, die dem ja '''ähneln''' ....schade...

    Inline Funktionen sind in C++ meistens eh den Makros vorzuziehen.



  • inline-Funktionen sind praktisch immer besser als Makros. Es ist deine verdammte Pflicht als C++-Programmierer derartige Makros gegen Funktionen auszutauschen ;).



  • inline-Funktionen sind praktisch immer besser als Makros

    Warum...?



  • Dr. Vogel schrieb:

    inline-Funktionen sind praktisch immer besser als Makros

    Warum...?

    Wikipedia: "Inline-Ersetzung erfüllt in C++ also in etwa den gleichen Zweck wie ein Funktionsmakro, bietet aber zusätzlich die Sicherheit einer statischen Typprüfung wie bei Funktionen und ist wegen geringerer Fehlerträchtigkeit dem Makro vorzuziehen. Sie muss explizit deklariert werden und kann für von Klassen unabhängige, wie auch für Elementfunktionen (Methoden) verwendet werden."

    Und in dem Buch "Effektiv C++ programmieren" gibst dazu auch ein Kapitel, hab's leider gerade verliehen. Aber es ist, genauso wie const zu #define, vorzuziehen.

    mfg.



  • Dr. Vogel schrieb:

    Warum...?

    Weil "function-like" Makros gegenüber inline Funktionen keine Vorteile und einige Nachteile haben. joomoo hat die Typprüfung ja bereits angesprochen. Ein anderer Punkt ist der, dass du dir mit Makros schnell ein Eigentor schiessen kannst. Bsp:

    #define mach_was(x) foo(x); bar(x)
    //...
    mach_was(++a);
    

    Der Präprozessor ist nunmal nichts weiter als ein Textersetzer. Deshalb macht er daraus

    foo(++a); bar(++a);
    

    , was aber nicht beabsichtigt war. Schon eher

    foo(++a); bar(a);
    

    Natürlich kann man die simple Textersetzung wiederum auch ausnutzen, zB

    #define msg(x) cout << __FILE__ << ", " << __LINE__ << ", " << x << endl
    

    Eine inline Funktion wäre hier vollkommen unnütz. Dennoch ändert das nichts daran, dass inline Funktion den Funktionsmakros generell vorzuziehen sind.


Anmelden zum Antworten