2011-01-17 2 views
0

誰かが以下の解読を手伝ってくれますか? プリプロセッサ文。プリプロセッサ文の解読

#define ALLOC(x,y)  x _##y; x* y = &_##y; 

ここでは、x型の変数yのメモリ割り当てが行われています。 しかし、私は上記のステートメントの##の目的は何か分かりません。誰かが私を助けることができれば素晴らしいだろう。

+0

を形成するために、トークン_とトークンbに参加しますプリプロセッサを実行してプロセスをどのように処理できるかを知ることができますか?理解するのはうれしいことですが、何か具体的なことを理解して何をテストすれば、プリプロセッサを単独で実行することができます。 –

答えて

0

私が正しく覚えていれば、##は "文字列自体"を連結することを意味します。

あなたのケースの例ALLOC(int、var2)==> int_var2;

int _integer; 
int* integer = &_integer; 
1

使用は、マクロが呼び出された場所に次のコードを作成し2つ(またはそれ以上)の別々のトークンから1つのトークンを作成する必要がある場合に使用されます。それなし

、すなわち

#define ALLOC(x,y) x _y; x* y = &_y; 

ALLOC(a,b) 

はに拡大する:プリプロセッサは、BとYを置換するために知っているが、別のトークンが完全_yあるため

a _y; a* b = &_y; 

。 ##演算子(すなわちあなたの例)

ALLOC(a,b) 

は、以下のように展開します

a _b; a* b = &_b; 

##は、トークン_b

+0

または、英語では、スタックに 'x'型のオブジェクトを"割り当て "て、それを指すように" y "をします。 –

3

トークン貼り付け演算子(##):このような

ALLOC(int, integer) 

としてINT * VAR2 = & _var2

関連する問題