C言語,トークン連結演算子(##)を使用してトークンを結合する

スポンサーリンク

鍛錬 900

C言語,トークン連結演算子(##)を使用してトークンを結合する

プリプロセッサ演算子のトークン連結演算子(##)を使用すると、トークンを結合することができます。
 
使用方法は、以下に示す通りです。

トークン1##トークン2

 
使用例は、以下に示す通りです。

 
#define S1 "A"
#define S2 "B"
#define STR(i) S##i
 

上記の場合、関数形式マクロの STR(i) を使用するとトークンが連結されます。

STR(1) の場合は、トークン S とトークン 1 が連結してマクロ定義の S1 となります。
STR(2) の場合は、トークン S とトークン 2 が連結してマクロ定義の S2 となります。

連結後のトークンは、有効なトークンである必要があります。
例えば上記の使用例の場合、STR(3) の場合はトークン S とトークン 3 が連結して S3 となりますが、S3 はマクロで定義されてないためコンパイル時にエラーとなります。

スポンサーリンク

プログラム

以下は、トークン連結演算子を使用して、関数形式マクロでトークンを連結しているプログラム、test_token.c です。

// include
#include <stdio.h>

// preprocessor
#define S1 "ABC"
#define S2 "DEF"
#define STR(i) S##i

// main
int main(void)
{
	printf("%s\n", STR(1));
	printf("%s\n", STR(2));
	
	return 0;
}
スポンサーリンク

実行結果

以下は、プログラム test_token.c を実行しています。

***@ubuntu:~/***/test/c$ 
***@ubuntu:~/***/test/c$ gcc -Wall -Wextra test_token.c -o test_token
***@ubuntu:~/***/test/c$ ./test_token
ABC
DEF

 
上記に示した通り、トークン連結演算子を使用して関数形式マクロでトークンを連結することができました。

タイトルとURLをコピーしました