C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Preprocessor-Anweisung durch Makro

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Jens Lenge
Guest





PostPosted: Wed May 17, 2006 1:18 pm    Post subject: Preprocessor-Anweisung durch Makro Reply with 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?

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





PostPosted: Thu May 18, 2006 6:44 am    Post subject: Re: Preprocessor-Anweisung durch Makro Reply with quote



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





PostPosted: Thu May 18, 2006 5:21 pm    Post subject: Re: Preprocessor-Anweisung durch Makro Reply with quote



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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.