Mit präprozessor befehlen Auskommentieren
-
Hallo zusamman,
Ich will in meinem Code jeder Zeile, die mit dem Wort "Extra" anfangen auskommentieren. Ist es möglich dieses mit Präprozessor Befehlen zu tun?
Also kurztgefasst will ich alle "Extra"s, mit "//Extra" ersetzen.
Danke im Voraus
-
Versuchs mal mit #define Extra //Extra
Auch wenns kein schöner Stil ist...
-
pumuckl schrieb:
Versuchs mal mit #define Extra //Extra
Auch wenns kein schöner Stil ist...Ja klar geht das so, aber das wäre schlauer (meiner Meinung nach):
#define Extra //
-
Ich glaube nicht, dass das funktioniert. Die Kommentare werden ja selbst vom Präprozessor aufgelöst.
Mal kurz ausprobieren:
#define Extra // Extra Kommentar
Macht der g++-Präprozessor zu
Kommentar
-
Müsste das nicht folgenderweise ablaufen:
Extra Kommentar | V // Kommentar | V NIX
denn der Präprozessor löscht dann doch alles hinter den Backslashes, oder etwa nicht?
So läuft es aber leider nicht ab, und das funktioniert (logisch gesehen) auch in keiner Variante.
#define Extra //Extra
Fazit: geht nicht. (?)
-
Natürlich geht es nicht.
Hat keine eine bessere Idee?
-
Suchen und Ersetzen der IDE verwenden und Situationen, wo sowas notwendig wäre aus dem Weg gehen.
-
Die Verarbeitungsreihenfolge ist im Standard festgelegt - und Kommentare werden vor der Behandlung von Präprozessor-Makros verarbeitet. Eventuell hilft dieser Beitrag weiter.
-
Lass eben noch einen externen Makroprozessor zuvor auf das Programm los. Ach, wozu ein Makroporzessor? Selbst ein einfaches
sed
sollte schon ausreichen.
-
Edit: Ich sollte meine eigenen Google-Links zuerst vollständig lesen und dann erst posten.
-
Die idee war sehr gut aber es ging leider auch nicht.
Hat noch keine eine Idee?
Bitte ich habe nicht mehr viel Zeit.
-
Bitte ich habe nicht mehr viel Zeit.
Haha, der war gut...
-
nichtconnected schrieb:
Die idee war sehr gut aber es ging leider auch nicht.
Welche?
Hat noch keine eine Idee?
Was spricht gegen ein
sed s#Extra#//#
oder vergleichbares vor dem Compilieren? Das kannst du auch wunderbar hintereinanderschalten mit ein bisschen Pipemagie, z.B.:< input.cc sed s#Extra#//# | g++ -xc++ -c -o input.o -
Dann braucht es nur noch einer kleinen Änderung deines Compileraufrufs zu gerade dem obigen und alles ist gut. Falls du schon ein Makefile oder ähnliches hast, sollte das schon fast trivial zu ändern sein.
-
SeppJ schrieb:
nichtconnected schrieb:
Die idee war sehr gut aber es ging leider auch nicht.
Welche?
Michael E. sein Link
Muss man sed nicht extra installieren?
-
nichtconnected schrieb:
Muss man sed nicht extra installieren?
Es ist kein Teil eines C++-Compilers. Wenn es absolut unabhängig portierbar sein muss, kannst du ja selber ein kleines Ersetzenprogramm mitliefern (oder eine Opensource-Implementierung von sed), welches als allererstes übersetzt wird und dann im folgenden vor alle weiteren Compilierungsvorgänge geschaltet wird.
-
Was ist mit #ifdef und #ifndef?
SeppJ schrieb:
eine Opensource-Implementierung von sed
Was sonst?
-
Das ist nicht genau das selbe, aber womöglich tut's schon
#define Extra if(false)
-
@seldon
Es reicht nicht für mich. Ich will die ganze Zeilen, die mit Extra anfangen auskommentieren.@SeppJ
Danke, aber ich muss es leider mit präpozessor befehlen machen.Ich bin langsam überzeug, dass es nicht möglich ist.
-
Wenn es sich bei der Anwendung nur um eine Art
DEBUG_ONLY
handelt, kann man auch ein normales Makro nehmen:#ifdef DEBUG #define DEBUG_ONLY(...) __VA_ARGS__ #else #define DEBUG_ONLY(...) #endif
Dann ist eben
DEBUG_ONLY cout << "Pos:" << get_pos(x, y); --> DEBUG_ONLY(cout << "Pos:" << get_pos(x, y));
Das finde ich noch annehmbar, in Anbetracht der Tatsache, dass es keine wirkliche Alternative gibt.
-
Ich habe nicht verstanden. Kannst du erkäeren was genau dieser Code macht?