誰かが私が次のプリプロセッサステートメントを解読するのを手伝ってくれませんか。
#define ALLOC(x,y) x _##y; x* y = &_##y;
ここで、タイプxの変数yのメモリ割り当てが行われていることを認識しています。しかし、上記のステートメントの##の目的が何であるかはわかりません。誰かが私を助けてくれたら素晴らしいと思います。
誰かが私が次のプリプロセッサステートメントを解読するのを手伝ってくれませんか。
#define ALLOC(x,y) x _##y; x* y = &_##y;
ここで、タイプxの変数yのメモリ割り当てが行われていることを認識しています。しかし、上記のステートメントの##の目的が何であるかはわかりません。誰かが私を助けてくれたら素晴らしいと思います。
これは、トークンの貼り付け演算子として知られています。
トークン貼り付け演算子 (##) は、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
のような使い方
ALLOC(int, integer)
マクロが呼び出された場所に次のコードが作成されます。
int _integer;
int* integer = &_integer;
私の記憶が正しければ、## は「文字列自体」を連結することを意味します。
あなたの場合の例 ALLOC(int,var2) == > int_var2; int* var2 = &_var2