 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Jens Lenge Guest
|
Posted: Wed May 17, 2006 1:18 pm Post subject: Preprocessor-Anweisung durch Makro |
|
|
Hallo Welt,
ich möchte eine Präprozessor-Anweisung durch ein Präprozessor-Makro
generieren lassen; also z. B. soll das Makro MY_COMMAND expandieren zu
"#pragma (xyz...)" oder ähnlich.
Straightforward geht das nicht:
#define MY_COMMAND #pragma (xyz...)
Obiges schlägt fehl. Ich habe auch dunkel im Hinterkopf, dass es für
diese Fälle einen "Trick" gab, finde den aber im Moment nicht mehr
wieder. Wo finde ich Infos dazu?
Jens
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Lukas Mai Guest
|
Posted: Thu May 18, 2006 6:44 am Post subject: Re: Preprocessor-Anweisung durch Makro |
|
|
Jens Lenge <spampot (AT) gmx (DOT) net> schrob:
| Quote: | Hallo Welt,
ich möchte eine Präprozessor-Anweisung durch ein Präprozessor-Makro
generieren lassen; also z. B. soll das Makro MY_COMMAND expandieren zu
"#pragma (xyz...)" oder ähnlich.
Straightforward geht das nicht:
#define MY_COMMAND #pragma (xyz...)
Obiges schlägt fehl. Ich habe auch dunkel im Hinterkopf, dass es für
diese Fälle einen "Trick" gab, finde den aber im Moment nicht mehr
wieder. Wo finde ich Infos dazu?
|
Das geht nicht, zumindest nicht direkt. Man kann natürlich eine Datei
mehrfach durch den Präprozessor schicken, aber das ist eher unschön. In
einem Präprozessordurchlauf können Präprozessordirektiven nicht aus
Makros erzeugt werden.
Das ist auch der Grund dafür, dass GCC __attribute__(x) statt #pragma x
verwendet: ersteres kann man sauber hinter Makros verstecken. In C99
gibt es noch _Pragma(xyz...), aber ich bezweifle, dass das in C++
existiert.
HTH, Lukas
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Stefan Reuther Guest
|
Posted: Thu May 18, 2006 5:21 pm Post subject: Re: Preprocessor-Anweisung durch Makro |
|
|
Jens Lenge wrote:
| Quote: | ich möchte eine Präprozessor-Anweisung durch ein Präprozessor-Makro
generieren lassen; also z. B. soll das Makro MY_COMMAND expandieren zu
"#pragma (xyz...)" oder ähnlich.
Straightforward geht das nicht:
#define MY_COMMAND #pragma (xyz...)
|
Richtig. Aus genau dem Grund hat man in C99 _Pragma eingeführt. Wirkt
wie #pragma, kann aber eben durch Präprozessor-Expansion entstehen.
_Pragma ("foo bar")
ist das gleiche wie
#pragma foo bar
Vielleicht unterstützt dein C++-Compiler das schon.
| Quote: | Obiges schlägt fehl. Ich habe auch dunkel im Hinterkopf, dass es für
diese Fälle einen "Trick" gab, finde den aber im Moment nicht mehr
wieder. Wo finde ich Infos dazu?
|
Der einzige Trick, der mir einfiele, wäre, den Präprozessor zweimal
aufzurufen. Das erfordert aber (1) einen separat aufrufbaren
Präprozessor, der (2) seinen eigenen Output wieder einlesen kann und (3)
Zeilen mit '#' am Anfang generieren kann. Das ist aber ein dreckiger
Trick. Verbreiteter und garantiert funktionabel ist, die Pragmas in
Header auszulagern, z.B. "beginpack.h" und "endpack.h" für die allseits
beliebten #pragma pack, und immer, wenn du das Pragma brauchst, den
Header inkludieren.
Stefan
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|