だから、これは私のコードです:なぜこのマクロは構文エラーを生成していますか?
// 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__))
私は最終的な数は、何かする必要があります最初のマクロが間違って行くように思わ使用する場合:ライン上の
std::cout << __WINDOW__RESOLUTION__X__ << std::endl; // Outputs 200 instead of 500
は、数200を出力するので、Yこの行でもコンパイルされません
std::cout << __WINDOW__RESOLUTION__Y__ << std::endl; // ERR with macro underlined
代わりに、X値の値[C2059を、構文エラー: ")"]
アレックスを助けてくれてありがとうございました
[2つの先頭のアンダースコアで名前を使用するか、またはアンダースコアが上位に続いてはいけません大文字の手紙、それらはすべてのスコープで予約されている](http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in-ac-identifier)。 –
あなたの問題については、前処理されたコードを生成してそれを見てください。 –
私はこのようなものをプロダクションコードで見つけることに恐れています...プリプロセッサの使用ができる限り制限されるべきであるという一般的なガイドラインに精通しています。単純に 'const int WindowX = 500;を使わないのはなぜですか? const int WindowY = 200; '? –