5 Stimmen

Wie erstellt man eine String-Präprozessor-Definition über die Befehlszeile in VC 2005 (C++)?

En Dokumentation sagt mir, dass der Befehlszeilenschalter /D dafür verwendet werden kann, etwa so:

  CL /DDEBUG TEST.C

würde ein DEBUG-Symbol definieren, und

  CL /DDEBUG=2 TEST.C

würde ihm den Wert 2 geben. Aber was mache ich, wenn ich das Äquivalent einer definierten Zeichenkette erhalten möchte, wie zum Beispiel

  #define DEBUG "abc"

?

6voto

avakar Punkte 31197

Aufgrund der Art und Weise, wie die Befehlszeile unter Windows analysiert wird, müssen Sie die Anführungszeichen entschlüsseln.

CL /DDEBUG=\"abc\" TEST.C

2voto

Chaohsiung Huang Punkte 146

Dies funktioniert für mich in VS2013:

/D_STRING="\"abc\""

dann ist es gleichbedeutend mit

#define _STRING "abc"

Hinweis: Wenn Sie

/D_STRING="abc"

Dies entspricht

#define _STRING abc

1voto

Glen Punkte 20940

Haben Sie versucht

CL /DDEBUG=abc TEST.C

oder

CL /DDEBUG="abc" TEST.C

1voto

MaxVT Punkte 12644

Danke Glen, die zweite Variante könnte auf der Kommandozeile funktionieren, aber der Mitarbeiter, für den ich diese Frage gestellt habe, hat sie schließlich in der Projektdefinition verwendet (er musste die Anführungszeichen entfernen und = durch # ersetzen):

/DDEBUG#\"abc\"

-1voto

Richard Corden Punkte 20939

Ich habe kein VC, um dies für Sie zu testen, aber im Prinzip sollte das Folgende funktionieren:

CL /DSTRINGIFY(X)=#X /DDEBUG=STRINGIFY(abc) TEST.C

Aktualisierung:

Wie von Kuber-Ober hervorgehoben, scheint die VC hier nicht das Richtige zu tun. Testen mit einem einfachen Beispiel, es erzeugt:

const char * s = STRINGIFY(abc);

Es kann auch mit anderen Compilern funktionieren, z.B. funktioniert die folgende g++-Befehlszeile:

g++ -D'STRINGIFY(X)=#X' -D'DEBUG=STRINGIFY(abc)' t.cc -E

# 1 "t.cc"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "t.cc"

const char * s = "abc";

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X