C ユーザーズガイド

トークンの連結

K&R C では、2 つのトークンを連結するために、少なくとも 2 つの方法がありました。次の 2 つの呼び出しは、2 つのトークン xl から 1 つの識別子 xl を生成します。


#define self(a) a
#define glue(a,b) a/**/b キ
self(x)1
glue(x,1)

ANSI C では、どちらの方法も使用できません。ANSI C では、上記の呼び出しは、両方とも 2 つの別々のトークン xl を生成します。しかし、上記の呼び出しの内 2 番目の方法については、## マクロ置換演算子を使用すれば、ANSI C 用に書き換えることができます。


#define glue(a,b) a ## b
glue(x, 1)

# と ## は、__STDC__ が定義されているときだけ、マクロ置換演算子として使用しなければなりません。## は実際の演算子のため、定義と呼び出しの両方で空白をより自由に使うことができます。

上記の古い形式の連結方法のうち、最初の方法を直接代用できる方法はありません。しかし、この方法では呼び出し時に連結の処理が必要なため、他の方法に比べてあまり使用されることはありませんでした。