Also das ist mein Code:Warum generiert dieser Makro einen Syntaxfehler?
// Defines a tuple
#define __WINDOW__RESOLUTION__ 500, 200
// Seperate the tuple
#define __WINDOW__X__1(Width, Height) (Width)
#define __WINDOW__Y__1(Width, Height) (Height)
// Add another sort of indirection because my tuple is a macro
#define __WINDOW__X__(Macro) __WINDOW__X__1(Macro)
#define __WINDOW__Y__(Macro) __WINDOW__Y__1(Macro)
// These should be the final values 500 and 200
#define __WINDOW__RESOLUTION__X__ (__WINDOW__X__(__WINDOW__RESOLUTION__))
#define __WINDOW__RESOLUTION__Y__ (__WINDOW__Y__(__WINDOW__RESOLUTION__))
Als ich das erste Makro verwenden, wo die endgültige Zahl sollte etwas schief zu gehen scheint:
std::cout << __WINDOW__RESOLUTION__X__ << std::endl; // Outputs 200 instead of 500
über die Linie gibt die Zahl 200, so dass der Y Wert anstelle des X-Wert
std::cout << __WINDOW__RESOLUTION__Y__ << std::endl; // ERR with macro underlined
diese Linie nicht einmal kompiliert [C2059, Syntaxfehler: ")"]
Vielen Dank für Ihre Hilfe Alex
[Verwenden Sie keine Namen mit zwei führenden Unterstrichen oder ein Unterstrich, gefolgt von einer oberen - Großbuchstaben, die in allen Bereichen reserviert sind] (http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in-ac-identifier). –
Wie für Ihr Problem, sagen Sie Ihrem Compiler, den vorverarbeiteten Code zu generieren und es anzusehen. –
Ich fürchte den Tag Ich werde so etwas in Produktionscode finden ... Sie sind vertraut mit der allgemeinen Richtlinie, dass die Verwendung des Präprozessors so begrenzt wie möglich sein sollte, oder? Warum benutzen Sie nicht einfach 'const int WindowX = 500; const int FensterY = 200; '? –