私は持っている
#define NAME(value) my ## value ## value
すると、どちらがいいですかNAME(1)
!my1value
NAME()
しかし、次のように変数をに渡したい
for(int i=0;i<10;i++)
{
NAME(i);
...
}
残念ながら、しかしmyivalue
、私は欲しいmy0value
、my1value
などになります。
何を変更すればよいですか?ありがとう
マクロはコンパイル時に置き換えられます (実際には、「実際の」コンパイルが始まる前でも、プリプロセッサによって置き換えられます)。これは純粋なテキスト処理です。
マクロが変数の値に基づいて展開を計算することは期待できません。
Macros only do text-replacement before compiling. It's basically the same as doing a 'Find&Replace' over your code. Loops are executed at runtime - so this doesn't make any sense.
But to answer your question anyway .... you could use a (compile-time) macro 'loop':
#include <iostream>
#define NAME(v) my##v##value
#define LOOP10 NAME(0), NAME(1), NAME(2), NAME(3), NAME(4), NAME(5), NAME(6), NAME(7), NAME(8), NAME(9)
int main()
{
int LOOP10; // example usage
}
boost supports preprocessor loops, as far as I know.
##はプリプロセッサディレクティブです
## は、#defineステートメントで##の前にあるものと後にあるものを連結します
uが「#defineNAME (value)my ## value ## value」と言ったように、これはエラーになります。これは、myivalueではなく「myii」を意味します。