は##
2 つのトークンを連結します。
重要なことは、プリプロセッサでのみ使用できることです。
演算子は、#
トークンを文字列化するために使用されます。
例えば:-
#(a ## b)
どれになる#ab
どれになる"ab"
したがって、h(f(1,2)) は「f(1,2)」になります。
#
また、と##
は 2 つの異なる演算子であることに注意してください。
プリプロセッサ演算子##は、マクロ展開中に実引数を連結する方法を提供します。置換テキストのパラメーターが ## に隣接している場合、パラメーターは実際の引数に置き換えられ、## と周囲の空白が削除され、結果が再スキャンされます。
詳細については、この連結も確認してください。
ここから:-
文字列化
マクロ引数を文字列定数に変換したい場合があります。パラメータは文字列定数内では置き換えられませんが、代わりに「#」前処理演算子を使用できます。マクロ パラメータが先頭の `#' と共に使用されると、プリプロセッサはそれを文字列定数に変換された実際の引数のリテラル テキストに置き換えます。通常のパラメータ置換とは異なり、引数は最初にマクロ展開されません。これを文字列化と呼びます。
引数を周囲のテキストと組み合わせて、すべて一緒に文字列化する方法はありません。代わりに、一連の隣接する文字列定数と文字列化された引数を記述できます。プリプロセッサは、文字列化された引数を文字列定数に置き換えます。次に、C コンパイラは、隣接するすべての文字列定数を 1 つの長い文字列に結合します。