10.3 プリプロセッサ(pre-prosessor)

  1.マクロのプリプロセッサによる展開
 C言語のマクロについては、第2章で説明しました。ここでは、定義されたマクロのプリプロセッサによる展開について簡単に説明します。

 C言語では、行の先頭が#で始まるものはマクロとして処理されます。 たとえば、#defineで記述する記号定数や#includeもマクロのひとつです。

 例えば前述のhello.cなどでは、フォーマット付き標準出力関数としてのprintfを用いますが、標準入出力ライブラリ関数を利用するため、プログラム先頭で#include <stdio.h>などとマクロ定義を行いました。

 C言語のマクロは非常に強力であり、多くのことが簡単に表現できる一方で、注意しなければ副作用が起きることがあります。副作用については、下記参考文献[1]などに詳しく説明されていますので、そちらを参照して下さい。

 C言語のマクロの仕組みは次の通りです。C言語のマクロは、Cコンパイラによるコンパイル(cc1)に先立って、Cプリプロセッサ(cpp)によって処理されます。 記号定数もCプリプロセッサで処理されます。コメントもCプリプロセッサによってこの段階で削除されます(コメント自体は、コード生成に無関係である)。