ためになるホームページ お問い合わせ




TOP > C言語 > 文字列化演算子とトークン連結演算子
文字列化演算子(#)
展開したマクロ パラメータを文字列定数に変換する。但し、この演算子は引数を取るマクロでのみ使える。マクロ定義でこの演算子を仮パラメータの前に使うと、マクロ呼び出しで渡されるダブルクォーテーションで囲まれ、定数文字列として処理される。

文字列化演算子の例
#inclulde <stdio.h>
#define OUT1(s) printf (#s "\n");

int main(int argc, char** argv)
{
  OUT1(aaaaa);
  OUT1("aaaaa");

  return(0);
}


出力結果
aaaaa
"aaaaa"


トークン連結演算子(##)
別個のトークンを結合して 1 つのトークンを作ることができる。マクロ定義の仮パラメータの前か後ろにトークン連結演算子を付けると、この仮パラメータは直ちに展開前の実引数に置き換えられる。つまり、マクロ展開されずに置換だけが行われる。

トークン連結演算子の例
#inclulde <stdio.h>
#define ERROR2 "Can not open file!"
#define OUT2(s) printf ("Error No"#s":%s\n", ERROR##s);

int main(int argc, char** argv)
{
  OUT2(2);

  return(0);
}


この例では、以下のように展開される
printf ("Error No"#s":%s\n", ERROR##s);
printf ("Error No"#s":%s\n", ERROR2);
printf ("Error No2:%s\n", ERROR2);

出力結果
Error No2:Can not open file!






Copyright 2007 ためになるホームページ All Rights Reserved.