C のプリプロセッサには2つの演算子がある。# と ## だ。
#演算子
#演算子はマクロ関数の引数を、引用符付きの文字列に変換する。
#include
#define MKSTRING(str) # str
int main(void)
{
int value;
value = 10;
printf("%s: %d\n", MKSTRING(value), value);
return 0;
}
takatoh@nightschool $ ./sample_12_5a value: 10
13行目の MKSTRING(value) が “value” に置き換えられている。
##演算子
##演算子は2つの識別子を連結する。
#include
#define output(i) printf("%d %d\n", i ## 1, i ## 2)
int main(void)
{
int count1, count2;
count1 = 10;
count2 = 20;
output(count);
return 0;
}
takatoh@nightschool $ ./sample_12_5b 10 20
outputマクロの引数 count が、##演算子によって 1 と 2 が連結され、count1 と count2 になっている。