
262
15
章 プリプロセッサ指令
#define printDBL(exp) printf(#exp " = %f ", exp)
printDBL(4 * atan(1.0)); // atan()
は
math.h
で宣言される
最後の行のマクロ呼び出しは次の文になる。
printf("4 * atan(1.0)" " = %f ", 4 * atan(1.0));
コンパイラが連続する文字列リテラルを連結するので、このコードは次の行と等しい。
printf("4 * atan(1.0) = %f ", 4 * atan(1.0));
この文は次のコンソール出力を生成する。
4 * atan(1.0) = 3.141593
次の例での
showArgs
マクロの呼び出しは、
#
演算子がマクロ引数の空白文字、二重引用
符、バックスラッシュをどう変更するかを示す。
#define showArgs(...) puts(#__VA_ARGS__)
showA
rgs(one\n, "2\n", three);
プリプロセッサはこのマクロを次のテキストに置き換える。
puts("one\n, \"2\\n\", three");
この文の出力は次になる。
one
, "2\n", three
15.2.2.3
トークン連結演算子
演算子
##
は2項演算子で任意のマクロの置換テキストで使える。左右のオペランドを一
緒にして1つのトークンにするので、トークン連結演算子と呼ばれる。結果のテキストがマ
クロ名を含むなら、プリプロセッサはそれをマクロ置換する。 ...