2012-04-05 19 views
1

Ich bin relativ neu in der Programmierung, und ich versuche zu lernen, wxWidgets in C++ (mit Visual Studio 2010) zu verwenden.#define Direktive mit mehreren Ersetzungen?

Ich schaute durch die wxWidgets Header-Datei "app.h" und ich sehe einige #define Direktiven, die ich nicht verstehen kann. Hier ein Beispiel:

#define wxIMPLEMENT_APP(appname)   \ 
    wxIMPLEMENT_WX_THEME_SUPPORT   \ 
    wxIMPLEMENT_APP_NO_THEMES(appname)" 

Ich bin es gewohnt, zu sehen #define mit einer „Kennung“ und einem „Ersatz“, so kann ich nicht verstehen, wenn dieser Makro hat zwei „Bezeichner“ (wxIMPLEMENT_APP(appname) und wxIMPLEMENT_WX_THEME_SUPPORT) und ein "Ersatz" (wxIMPLEMENT_APP_NO_THEMES (appname)) oder ein "Identifizierer" (wxIMPLEMENT_APP(appname)) und zwei "Ersetzungen" (wxIMPLEMENT_WX_THEME_SUPPORT und wxIMPLEMENT_APP_NO_THEMES(appname)).

Wie soll ich dieses Makro verstehen?

Ich habe versucht, suchen online und in Text Bücher, die Suche unter „Makros“, „Pre-Prozessor-Richtlinien“, „Ersetzen von Text-Makros“, „# define-Direktive“ und ähnliche, aber ich konnte keine Beispiele mit Erläuterungen finden das sieht aus wie das hier.

+0

Hinweis: Versuchen Sie, Makros als letztes Mittel zu verwenden. – iammilind

+0

Unter Verwendung Ihrer Nomenklatur verfügt Ihr Makro über einen Bezeichner und einen Ersatz. Der Bezeichner ist 'wxIMPLEMENT_APP (appname)', der Ersatz ist 'wxIMPLEMENT_WX_THEME_SUPPORT wxIMPLEMENT_APP_NO_THEMES (appname) ''. –

+0

Rob: danke für die Klärung der Rollen von Bezeichner und Ersatz. –

Antwort

3

Dieses Präprozessormakro verfügt über einen einzelnen Ersatz, der auf mehrere Zeilen aufgeteilt ist. Die \ am Ende der Zeile können Sie eine einzige "logische" Zeile auf mehrere Zeilen Text schreiben.

Alles, was folgt wxIMPLEMENT_APP(appname) wird in den Text des Programms eingefügt, wenn wxIMPLEMENT_APP(appname) Muster ist abgestimmt; Vermutlich werden diese beiden Definitionen vom Präprozessor weiterverarbeitet, da sie wie Referenzen zu anderen Makrodefinitionen aussehen.

+0

Vielen Dank für Ihre Hilfe, neben der Beantwortung meiner spezifischen Frage half, einige der Terminologie für mich zu klären. –