本稿ではC言語のマクロ機能について、高度な使い方をご紹介します。はじめに、関数形式マクロについて、ありがちなミスの回避方法に焦点を当てながら、説明します。次に、#および##演算子がどのように解釈されるかを示します。そして、do{}while(0)というトリッキーな記述についてもご紹介します。最後に、#ifまたは#ifdefのどちらが条件付きコンパイルのために好ましいか、という話題に触れます。 関数形式マクロの問題 関数形式マクロは、一見シンプルで単純な構造に見えます。しかし、実際に使ってみると、たくさんの欠点に気づくでしょう。ここで、いくつかの具体例と、その例が示す問題点、それらの解決策を示します。 マクロのパラメータをいつもカッコでくくる まずシンプルなマクロを見てみましょう。 #define TIMES_TWO(x) x * 2 単純な使用においては、これで問題ないです。例えば、TIM