Warum wird das Makro nicht ausgeführt?
-
Hallo Leute,
bin ja noch keine großer Auskenner in C++. Kann mich aber nicht davor drücken
Mein Problem:
Ich hab ein Header-File + statische Library von einem Dritthersteller. Im Header-File sind Makros definiert, die ich benutzen muß. Die schreiben angeblich was in das Map-File - in den Beispielen kann ich diese Strukturen dann auch dort finden.
Dummerweise kann ich die Beispiele, in denen sich der ganze Code in einer .c-Datei befindet, nicht 1:1 übernehmen. Hab also alles auf meine Lösung angepaßt:
ein Main-File mit der Main-Funktion und eine Header-Datei mit zugehörigem cpp-File, in denen diverse Funktionen definiert und implementiert sind. Klassenlos, für's erste.Die Makro-Aufrufe hatte ich nun schon an allen möglichen Stellen meiner drei Files. Aber irgendwie ist das völlig wurscht, es passiert - nix. Also kompilieren geht wunderbar, die Exe funktioniert auch, nur das, was die Makros in das Map-File schreiben sollten, steht dort nicht. Als ob die Dinger nicht ausgeführt werden. Dies ist mein erster "Kontakt" mit Makros, deshalb weiß ich jetzt nicht so richtig, wie weiter
Ich nutze Visual Studio.
Hat jemand einen Tipp?
-
Zeig doch mal die Makros.
-
. schrieb:
Zeig doch mal die Makros.
Das steht z.B. im Header-File:
/* support macros to simplify use of AXAN structures */ #define WKB_BEGIN_AXAN_HEAD(Name, Signature, Flags) \ struct {\ WKBAXANHEAD wkbaxh;\ union {\ WKBAXANCODETABLE FAR *pwkbact;\ WKBAXANRSRCTABLE FAR *pwkbart;\ } a[];\ } wkbaxh##Name = {\ {sizeof(WKBAXANHEAD), 0, Signature, Flags, &wkbaxh##Name.wkbaxh}, #define WKB_AXAN_CODE_TABLE(t) &wkbaxct##t.wkbaxct, #define WKB_AXAN_RSRC_TABLE(t) &wkbaxrt##t.wkbaxrt, #define WKB_END_AXAN_HEAD() \ NULL};
Und so sieht es dann bei mir aus:
WKB_BEGIN_AXAN_HEAD(Demo, "WKAXANH", 0)
-
Da wird ja auch nur eine Struktur gefüllt.
Also da ist es klar, das dann nachher nichts in der Datei steht.
-
Hm, das ist ja nur eins. Das sind 'ne ganze Menge Makros, wenn ich die alle hierhin kopieren soll, wird das ein bißchen lang...
WANN wird denn so ein Makro ausgeführt? Beim Kompilieren?
-
Ein Makro wird nicht ausgeführt, sondern expandiert. Das macht der Präprozessor. Er registriert bei #define das Makro, und ersetzt es an den Stellen, wo es aufgerufen wird, direkt im Programmtext. Daraus ergibt sich ein C++-Programm ohne Makros, was dann dem eigentlichen Compiler übergeben wird.
Bei manchen Compilern kann man die Präprozessorausgabe vor dem Compilieren abfangen, beim gcc z.B. mit -E.