2

私は持っている

#define NAME(value) my ## value ## value

すると、どちらがいいですかNAME(1)my1value

NAME()しかし、次のように変数をに渡したい

for(int i=0;i<10;i++)
{
    NAME(i);
    ...
}

残念ながら、しかしmyivalue、私は欲しいmy0valuemy1valueなどになります。

何を変更すればよいですか?ありがとう

4

3 に答える 3

6

マクロはコンパイル時に置き換えられます (実際には、「実際の」コンパイルが始まる前でも、プリプロセッサによって置き換えられます)。これは純粋なテキスト処理です。

マクロが変数の値に基づいて展開を計算することは期待できません。

于 2013-03-14T18:48:35.860 に答える
1

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.

于 2013-03-14T19:32:48.670 に答える
0

##はプリプロセッサディレクティブです

## は、#defineステートメントで##の前にあるものと後にあるものを連結します

uが「#defineNAME (value)my ## value ## value」と言ったように、これはエラーになります。これは、myivalueではなく「myii」を意味します。

于 2013-03-14T19:15:11.407 に答える