Probleme mit defines
-
Manfred Schmidtke schrieb:
estartu_de schrieb:
Dann habe ich wohl bei den Defines mal nicht ausgepasst. Ich dachte immer, das wäre sture Textersetzung
Ist es auch. Bin aber auch noch nie auf den Gedanken gekommen, das "1""2""3" "123" ergibt. Statt dessen habe ich auch immer fröhlich concat benutzt.
ZUm Glück schmeißt ein ANfänger wie ich sowas mal in die Runde!
-
Naja, ich kenne das so, wenn du sowas hast:
#define DEF 375 int a = DEF;
Darauf wird dann:
int a = 375;
Und wenn man sowas macht:
#define DEF2 370; if (a == DEF2)
Dann gibts fette Fehler.
Ich meinte halt, dass der Platzhalter (das DEF oder so) durch den Rest der Zeile stur ersetzt wird.
-
Ja, das ist ja acuh so.
Aus
#define TEXT1 "Text1" #define TEXT2 "Text2" MessageBox(TEXT1 TEXT2);
wird
MessageBox("Text1" "Text2");
Und diese Zeile wird dem Kompiler übergeben.
Und da das gleichbedeutend ist mit
MessageBox("Text1Text2");
kompiliert er es auch ohne Probleme.
-
Polofreak schrieb:
wieso sture Textersetzung?
Ich kann ja auch#define SPALTE_PCD (short index =0)
oder
#define BGRGB (255,255,255)//<-- auch kein Text!
Du hast was falsch verstanden.
Die defines werden vom Präprozessor verarbeitet. Und er ersetzt den Text SPALTE_PCD durch (short index =0) in deinem Quellcode. Und erst dieser bearbeitete Quellcode wird dann dem Kompiler übergeben. Das war mit Textersetzung gemeint.
-
Achsooo, der Denkfehler war nicht bei den defines sondern bei der Vorgehensweise des Compilers.
Okay, DA fehlt mir noch so einiges.
Das sind die Details, zu denen es irgendwie keine wirkliche Sammlung gibt.
-
Ok jetzt hab glaub sogar ich das verstanden!
@ESTARTU_DE dann sammle diesen ganzen Details schreib ein Buch drüber und werde reich, beteilige mich mit 20% :p weil ich das Thema grad in die Runde geworfen hab
-
Leider wird man mit solchen Büchern nicht reich
-
Wär das nicht (in gekürzter Form) was für die FAQ?
-
Wenn du magst, kann du ja einen gekürzten Beitrag schreiben. Ich verschieb ihn dann in die C++-FAQ.
-
Okay, morgen.
-
Wendest dich halt dann vertrauensvoll per eMail an mich, wenn er fertig ist.