Präprozessordefinition, statt im Code im VS Projekt?

DarthShader

Erfahrenes Mitglied
Hallo,

in meinem Programm gibt es (unter Anderem) die folgenden zwei Präprozessor Definitionen:

Code:
#define EN_DEB
#define I_FUNC extern "C" void i_func

Das C++ Programm kompiliert ohne Probleme. Nun möchte ich diese Zeilen aus
meinem Code entfernen, und dem Projekt als Eigenschaften übergeben. Dazu
rufe ich die Projekteigenschaften auf und navigiere zu
"Konfigurationseigenschaften" -> "C/C++" -> "Präprozessor" (VS 2005).

Nun möchte ich die Definitionen in das Feld "Präprozessordefinitionen"
eingeben. Ich habe es versucht mit den verschiedensten Varianten, z.B.:

Code:
EN_DEB;I_FUNC="define I_FUNC extern \"C\" void i_func"

(auch mal ohne =, oder ohne ", etc...)

Ich schaffe es jedoch einfach nicht, dass das Projekt dann kompiliert,
anscheinend wird immer etwas falsches für EN_DEB und I_FUNC in den Code
eingesetzt.

Wie muss ich die beiden Definitionen in das Feld eintragen, damit es genau
denselben Effekt hat, als stünden die "#define"'s wie oben angegeben im Code?


Vielen Dank für Eure Hilfe!
 
Hi.

Die Definition für EN_DEB ist schon richtig. Für I_FUNC wirst du die Definition nicht in die Projekteigenschaften verlagern können - es sei denn du findest eine Möglichkeit das die Anführungszeichen nicht entfernt werden. Laut Visual Studio Hilfe werden alle Anführungszeichen entfernt bevor der Wert des Präprozessorsymbols gesetzt wird - und dabei spielt es wohl keine Rolle ob die Anführungsstriche mit Backslash entwertet sind oder nicht.

Gruß
 
Sehr interessant, dass die Anführungszeichen entfernt werden, habe ich gar nicht gelesen.

Gut, nehmen wir jetzt mal an, ich lasse das extern "C" weg, sodass ich nur das hier bräuchte:

Code:
#define I_FUNC void i_func

trage ich nun "I_FUNC void i_func" (ohne anführungszeichen) in das Feld ein, funktioniert es trotzdem nicht (auch nicht mit anführungszeichen). Das Kuriose ist, im Ausgabefenster sagt VS beim Kompilieren, es könne die Datei "void" sowie die Datei "i_func" nicht finden.

Wie genau muss also nun der Eintrag im Feld für die Präprozessordefinition aussehen?


Vielen Dank!
 
Wenn ich es exakt so reinschreibe, meldet das VS den folgenden Fehler gleich zu Beginn beim Kompilieren:

Code:
------ Erstellen gestartet: Projekt: TestProject, Konfiguration: Debug Win32 ------
Kompilieren...
i_func
c1xx : fatal error C1083: Datei (Quelle) kann nicht geöffnet werden: "i_func": No such file or directory

Anscheinend denkt das VS bzw. der Compiler, dass "i_func" eine Eingabedatei ist, die er kompilieren soll. Stell man sich den Eingabebefehl des Compilers vor, so steht "i_func" sicherhlich auf der Kommandozeile alleine da, was für ihn ja eine Quelldatei ist.

Das Format ist also noch nicht ganz das richtige... es ist zum Verzweifeln :-)
 
Jetzt hab ichs endlich gewuppt, es funktioniert, wenn ich exakt das folgende Eintrage:

Code:
"EN_DEB;I_FUNC void i_func"

also den gesamten Ausdruck in Anführungszeichen, ohne ein = dazwischen, die Makros getrennt per Semikolon.
 
Zurück