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?
Eine kleine Variante von Marcelo Cantos 'Antwort funktioniert für mich auf GNU cpp 4.4.3:
%Vor% 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.
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.
Tags und Links c escaping c++ c-preprocessor