define über mehrere Zeilen



  • Hallo,

    kann mir jmd von euch kurz erklären, was an diesem Ausdruck falsch ist.

    #define	LIST_CTRL_VERT_THUMB_POS		(LIST_CTRL_VERT_ARROW_SIZE_HEIGHT + LIST_CTRL_VERT_ARROW_SIZE_HEIGHT	\
    													LIST_CTRL_VERT_THUMB_SIZE_HEIGHT + LIST_CTRL_VERT_TITLEBAR_SIZE_HEIGHT	\
    													LIST_CTRL_VERT_HORI_SCROLLBAR_HEIGHT - 2)
    
    double nHeight = (clientRect.Height() - LIST_CTRL_VERT_THUMB_POS);
    

    Als Fehlermeldung bekomme ich "error C2143: Syntaxfehler: Es fehlt ')' vor 'Konstante'"

    Gruß
    Lars



  • Du hast keinen Operator zwischen LIST_CTRL_VERT_ARROW_SIZE_HEIGHT und LIST_CTRL_VERT_THUMB_SIZE_HEIGHT sowie LIST_CTRL_VERT_TITLEBAR_SIZE_HEIGHT und LIST_CTRL_VERT_HORI_SCROLLBAR_HEIGHT.


  • Mod

    Und tu so etwas bitte nicht in echtem Code, sondern nur um mal mit Makros zu experimentieren.



  • SeppJ schrieb:

    Und tu so etwas bitte nicht in echtem Code, sondern nur um mal mit Makros zu experimentieren.

    danke für den Hinweis, die hab ich total übersehen 🙄

    Wie würdest du dann sowas im Code definieren?



  • Lars B. schrieb:

    Wie würdest du dann sowas im Code definieren?

    const int LIST_CTRL_VERT_ARROW_SIZE_HEIGHT = 10;
    //...
    
    const int LIST_CTRL_VERT_THUMB_POS = /*hier die Rechnung*/;
    

    Der Vorteil ist dabei, dass es erstens typsicher ist, zweitens sind die Fehlermeldungen auch sehr viel verständlicher, da nicht die Codezeile als Fehler angezeigt wird, in der LIST_CTRL_VERT_THUMB_POS benötigt wird, sondern die Zeile der Definition.



  • Derart lange Bezeichner finde ich schrecklich. Ich persönlich würde sie in einen Namensraum packen.

    namespace ListCtrlVert
    {
        const int ArrowSizeHeight = ...;
        const int ThumbSizeHeight = ...;
        // ...
    }
    

    Die Trennung bei der Verwendung ist meiner Ansicht nach übersichtlicher, ausserdem besteht die Möglichkeit der using -Direktive, wenn der Kontext eindeutig ist.


Anmelden zum Antworten