Probleme mit #define
-
Hi Leute
Ich versuch mit #define ein bestimmten quelltext bereich zu öffnen wenn die Datei fehlt.
Mein Problem ist das das nicht funktioniert kann mir jemand sagen was ich falsch mache.int Game::new_game(std::string game_name, std::string game_path) { int id; TiXmlDocument doc("./config/self.conf"); doc.LoadFile(); id = self_list(); if(id == -1) { #define NEW_DATA } #ifdef NEW_DATA TiXmlElement data("MyGames"); id=0; #endif TiXmlElement name("Game"); name.SetAttribute("ID", id+1); name.SetAttribute("NAME", game_name.c_str()); name.SetAttribute("PATH", game_path.c_str()); #ifdef NEW_DATA data.InsertEndChild(name); doc.InsertEndChild(data); #else doc.InsertEndChild(name); #endif if(doc.SaveFile()) { return -5; } return 0; }Grüße,
Nico
-
Dir ist anscheinend nicht klar, dass Präprozessordirektiven zur Compile-Zeit verarbeitet werden. Eigentlich sogar noch davor. Das ist ein reines Text-Ersetzungswerkzeug.
http://de.wikipedia.org/wiki/C-Präprozessor
Den Präprozessor interessiert es nicht, ob Du ein
#definein einemif(){}Block rein schreibst. Er läuft über den Quelltext rüber, verrichtet seine Arbeit und präsentiert das Ergebnis (welches keine Präprozessordirektiven mehr enthält) dem eigentlichen Compiler.
-
Aso dann hab ich das Prinzip nicht verstanden. Danke
-
Nehm doch einfach
const boolund dann kannst ja überprüfen obs true oder false ist.
Es ist empfehlenswert, generellconst#definevorzuziehen, also wos nur möglich ist lieber const anstatt define.
Lg freeG
-
Wie soll ihm hier ein
const boolhelfen?!
Das ist ein ganz klarer Fall von einem ganz normalembool.
-
Ich hab ein bool variable genommen geht jetzt auch alles.
-
drakon schrieb:
Wie soll ihm hier ein
const boolhelfen?!const bool newData = (id == -1);
-
@Nexus
Dein Tipp ist gut hab ich gleich mal eingebaut danke.
-
Lesen, posten. Ich sollte mich wirklich wieder dran halten..

Da hat mich das define wirklich ein wenig verwirrt.