0

誰かが私が次のプリプロセッサステートメントを解読するのを手伝ってくれませんか。

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

ここで、タイプxの変数yのメモリ割り当てが行われていることを認識しています。しかし、上記のステートメントの##の目的が何であるかはわかりません。誰かが私を助けてくれたら素晴らしいと思います。

4

4 に答える 4

4

これは、トークンの貼り付け演算子として知られています。

于 2011-01-17T14:25:11.857 に答える
3

トークン貼り付け演算子 (##) は、2 つ (またはそれ以上) の個別のトークンから 1 つのトークンを作成する必要がある場合に使用されます。

それなしで、すなわち

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

ALLOC(a,b)

次のように展開されます。

a _y; a* b = &_y;

プリプロセッサは y を b に置き換えることを知っていますが、_y はまったく別のトークンであるためです。

## 演算子を使用 (つまり、あなたの例)

ALLOC(a,b)

次のように展開されます。

a _b; a* b = &_b;

## はトークン_とトークンを結合してトークンbを形成します_b

于 2011-01-17T14:34:02.850 に答える
1

のような使い方

ALLOC(int, integer)

マクロが呼び出された場所に次のコードが作成されます。

int  _integer;
int* integer = &_integer;
于 2011-01-17T14:29:37.670 に答える
0

私の記憶が正しければ、## は「文字列自体」を連結することを意味します。

あなたの場合の例 ALLOC(int,var2) == > int_var2; int* var2 = &_var2

于 2011-01-17T14:28:20.913 に答える