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.
-
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.