2010-12-14 2 views
2

Hier ist mein Szenario: Ich habe eine Reihe von Quelldateien, die ich nicht ändern möchte, aber ich möchte einige der String-Literale durch andere Werte ersetzen. Hier ein Beispiel:In C++ ist es möglich, ein String-Literal als Makroname zu verwenden?

#define "oldString" "newString" 
+2

** Wenn ** das funktionierte, wäre das Ergebnis in jeder Hinsicht identisch mit dem, was Sie erhalten würden, wenn Sie den Quellcode direkt geändert hätten. Setzen Sie die Quelle in die Versionskontrolle, damit Sie verfolgen können, welche Änderungen Sie vorgenommen haben. Oder schreibe ein Skript, das die Quelle vor jeder Kompilierung massiert. Da Sie die Quelle kompilieren (anstatt sie zum Beispiel während der Fehlersuche als Referenz zu betrachten), sollte es nicht gefährlich sein, sie in der beschriebenen Weise zu modifizieren. –

Antwort

5

Nein, das ist nicht möglich. Wenn Sie bereits Makros anstelle der Strings verwendet hätten, wäre es einfach gewesen, die Makrodefinition zu ändern, um eine andere Zeichenfolge zu verwenden - besser spät als nie, vielleicht möchten Sie es jetzt tun.

+0

Toll, danke für die schnelle Antwort. In diesem Fall werden die Quelldateien von einer anderen Firma produziert und ändern sich ziemlich häufig, so dass ich hoffte, einfach ihre Dateien fallen zu lassen (und einen schnellen Vergleich durchzuführen, um sicherzustellen, dass nichts Wichtiges geändert wurde) und diese Datei einzuschließen. Mein Backup-Plan besteht darin, ein Skript zu schreiben, um die Zeichenfolgen zu ersetzen, wie Rob K. oben vorgeschlagen hat. – Freerobots

5

Nein, #define können Sie einem Bezeichner einen Wert zuweisen. Bezeichner dürfen das Anführungszeichen nicht enthalten.

Verwandte Themen