2012-03-11 10 views
0

私はプリプロセッサに、どの名前が定義されているかに基づいてリストを生成しようとしています。私はLISTについては、このからいくつかの警告が再定義されている取得し、その後、私はそれがエラーを与えるLISTを使用しようとするコードでこのC++プリプロセッサとの連結

#define LIST "Start of list!" 

#ifdef WITH_FOO 
#define LIST LIST "Foo" 
#endif 

#ifdef WITH_BAR 
#define LIST LIST "Bar" 
#endif 

#define LIST LIST "End of list!" 

ような何か:「LISTはこのスコープで宣言されていませんでした」、警告はさておき、そうすべきだと私は信じている。

これを動作させるにはどうすればよいですか?

答えて

3

あなたは、いくつかの補助マクロを使用することができます。

#ifdef WITH_FOO 
# define LIST_FOO "Foo" 
#else 
# define LIST_FOO 
#endif 

// ... ditto for BAR 

#define FOO "Start of list!" LIST_FOO LIST_BAR "End of list!" 
+0

ああ、もちろん。ありがとう。 –

1

あなたはインクリメンタルプリプロセッサとCまたはC++におけるそのようなマクロ値を構築することはできません。

プリプロセッサー—で若干の奇跡を引き出すことができます。可能なことを示すためにBoost Preprocessorライブラリーを参照してください。しかし、それはあなたが求めている機能を提供するとは思えません。