プリプロセッサ
プリプロセッサ(preprocessor)とは、一般にある処理を行うソフトウェアに対して、データ入力やデータ整形などの準備的な処理を行うソフトウェアのことである。特にコンパイラに対して使うことが多く、ここではそれを中心に述べる。
他の分野の例としては、CADやCAEのデータ処理がある。またワープロソフトウェアにおける漢字変換ソフトウェアもプリプロセッサの一例である。
コンパイラに対して
コンパイル処理において、プリプロセッサ(preprocessor)とは、コンパイラがソースコードをコンパイルする前に、一旦ソースコードに処理を施すためのプログラムである。
プリプロセッサによって実行される命令は「プリプロセッサ指令」(ディレクティブ)などと呼ばれ、処理自体は「プリプロセス」(preprocess)と呼ばれる。
処理内容
以下のようなものがある。
- ファイルの読み込み (including)
- マクロの展開(文字列を、あらかじめ定義された規則に従って置換する)
- 定数の数値への置き換え
- コンパイル条件によるソースコードの部分的選択
- コメントの削除
環境
プリプロセッサを用いる言語の代表的なものとしてC言語がある。GNUプロジェクトのcppコマンドはよく使われているプリプロセッサである。cppコマンドを明に実行しなくても、C言語コンパイラのccコマンドやgccコマンドはその内部でプリプロセッサを先に実行させることができる。
また、言語仕様の貧弱な言語を構造化プログラミングができるようにしたものもある。ratfor(FORTRANのプリプロセッサ)が有名である。
そのほかにも、FORTRANやCOBOLのプリプロセッサが商用のツールとして、メインフレーム向けに販売されている。
注意点
プリプロセッサを通すことを前提に記述されたプログラムは、コンパイラのあずかりしらない内容を含んでいることになる。このことは、たとえばマクロの定義と同じ文字列が全て変換されてしまったり、定数の型をチェックできなかったりと、問題の火種をはらんでいる。そのため、プリプロセッサを用いる場合には注意が必要である。
このような名前衝突の問題をさけるための対策としてマクロは大文字だけで記述し、それ以外の識別子は小文字をまぜるという慣習がある[1]。
C++の様に、言語自体の機能によって定数やインライン関数を記述可能な言語ではなるべく言語自体の機能を使い、プリプロセッサを排除して記述すべきだという意見が存在するが、互換性や慣習からプリプロセッサを利用した記述が行われる場面は依然多い。
また、プリプロセッサを積極的に用いてメタプログラミングを行うといった高度な用法もある。
関連項目
外部リンク
- The C Preprocessor - gnu.org(英語)、
- The C Preprocessor その和訳- 株式会社SRA
(※ 漢字が化ける場合はブラウザの表示オプションのエンコードで日本語EUC(=EUC-JP)コードを指定して閲覧する)