2016-08-12 5 views
5

私は、次の定義があります文字列マクロでforループを使用する方法はありますか?

#define STRING_OBJECT_1 "bird" 
#define STRING_OBJECT_2 "dog" 
#define STRING_OBJECT_3 "cat" 
#define STRING_OBJECT_4 "human" 
#define STRING_OBJECT_5 "cow" 
#define STRING_OBJECT_6 "snake" 
#define STRING_OBJECT_7 "penguin" 
#define STRING_OBJECT_8 "monkey" 

私だけSTRING_OBJECT_ + "(number string)"を使用してSTRING_OBJECTに番号が付け取得したいので、基本的に直接STRING_OBJECT_1を入力しないと。

C++で文字列マクロをループに使用する方法はありますか?

+0

マクロの使用方法を表示できますか?ループ内では、実行時の反復によって値が変化し、プリプロセッサでは使用できなくなるため、可能ではありません。 –

+0

これをチェックしてください['%DO YourIndexHere = 1%TO 5 <%BY 1>; '](http://support.sas.com/documentation/cdl/en/mcrolref/61885/HTML/default/viewer.htm#a000543755.htm) –

答えて

5

C++で文字列マクロをループに使用する方法はありますか?

いいえ、ありません。

マクロは、オブジェクトコードを作成するためにソースコードがコンパイルされる前に処理されます。

forループ内の変数の値は、実行時に設定されます。したがって、彼らはマクロを利用することはできません。

あなたのベスト・ベットは、配列変数を使用してコードを拡張し、forループの配列変数を使用することです。

#define STRING_OBJECT_1 "bird" 
... 
#define STRING_OBJECT_8 "monkey" 

std::string object_array[] = {STRING_OBJECT_1, ..., STRING_OBJECT_8}; 

for (int i = 0; ...) 
{ 
    do_something(object_array[i]); 
} 
+0

ありがとうございました。 –

2

、あなたはこれを行うことはできません。マクロはC/C++言語の一部ではありません。その値によってプリプロセッサに置き換えられ

マクロは時間をコンパイルします。 ランタイムでマクロを変更できなかったことはありません。

関連する問題