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 になっている。