Gibt es eine Möglichkeit, einer C-Präprozessordirektive zu entkommen?

8

Was ich versuche, ist die C-Präprozessorausgabe #ifdef , #else und #endif Direktiven. Das heißt, ich möchte irgendwie eine Direktive "entkommen lassen", so dass die Ausgabe des Präprozessors die Direktive enthält, in der der Präprozessor auf der Ausgabe läuft.

Ist es möglich, eine CPP-Anweisung so zu "entkommen", dass sie vom Präprozessor ausgegeben wird, so dass die Ausgabe einer Escape-Direktive eine Präprozessordirektive wäre, wenn die CPP-Ausgabe selbst vorverarbeitet werden sollte?

    
Daniel Trebbien 07.10.2011, 13:02
quelle

3 Antworten

10

Eine kleine Variante von Marcelo Cantos 'Antwort funktioniert für mich auf GNU cpp 4.4.3:

%Vor%     
Ilmari Karonen 07.10.2011, 13:28
quelle
6

BEARBEITEN: Die folgende Antwort scheint nur für frühere Versionen von cpp zu funktionieren. Es bricht irgendwo zwischen 4.2.1 und 4.3.2. gcc -E und g++ -E brechen sogar früher. Siehe Kommentare für die Details.

Hier ist ein Trick, der zu funktionieren scheint:

%Vor%

Sie müssen cpp direkt verwenden, da ein Compiler versucht, die Präprozessorausgabe sofort zu verwenden und nicht weiß, was mit den nicht verarbeiteten Anweisungen geschehen soll.

    
Marcelo Cantos 07.10.2011 13:05
quelle
3

Ein anderer Trick, der zu funktionieren scheint, ist:

%Vor%

Mit GCCs Preprozessor (Version 4.5.2) bekomme ich:

%Vor%

Aus irgendeinem Grund hat diese Technik das gleiche führende Platzproblem wie Ilmari Karonens Lösung , aber das ist wahrscheinlich kein Problem mit modernen, standardkonformen C-Präprozessoren.

    
Daniel Trebbien 07.10.2011 14:17
quelle

Tags und Links