- ベストアンサー
プリコンパイラとは?
コンパイラの意味はわかるのですが、プリコンパイラが何をするのかがわかりません。プリが「~前の」という接頭語ということまでは調べたのですが・・・。 ご存知の方、教えてください。よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
プリコンパイラとは名前の通り「コンパイラの前に使うもの」です。 コンパイラ型の言語ではまずソースをテキストファイルに人間が書き、コンパイラを通して実行ファイルを作っていきます。しかし、コンパイラが理解できるソースを直接全て人間が書くのはしばしば効率が悪かったり理解しづらかったりします。 そこで、ソースを書く時は人間に便利な仕様にしておいて、プリコンパイラでそれをコンパイラが理解できるソースに書き直すということをするわけです。 テキストエディタ 出力:人間が書いたソース ↓ プリコンパイラ 出力:コンパイラが理解できるソース ↓ コンパイラ (出力:オブジェクトファイル) (↓ ) (リンカ ) 出力:実行ファイル Cコンパイラとよく組み合わせて使われるプリコンパイラを挙げてみます。 Cプリコンパイラ 他のみなさんが既に挙げているように、主に#で始まる行を処理します。 いろいろなソースで共通して使われる部分を共有するための仕組み(include)や、マクロ処理、コンパイル時の条件分岐等、様々な処理をします。 C++プリコンパイラ C++のソースをCのソースに変換します。本来C++コンパイラは存在しないのでCソースに変換してからCコンパイルにかけます。しかし、最近はC++コンパイラも存在するのでその場合はCプリコンパイラと大差ないと思います。 f2cプリコンパイラ フォートランのソースをCのソースに変換します。需要の関係上Cコンパイラの研究が極端に進んだため、フォートランコンパイラを用意して使うよりもCソースに変換してからCコンパイラでコンパイルした方が性能がよかったり、メーカー側の開発環境の準備コストが低くすむといった現象の産物のようです。 この他の言語でも、コンパイラごとに1つ以上のプリコンパイラがあるといっても過言ではないと思います。
その他の回答 (3)
- kokucho81
- ベストアンサー率61% (157/255)
プリコンパイラは、プリプロセッサと同意です。 元来、例えば、C/C++コンパイラは、入力されたソースコード中に、 #define や #pragma などの記述があると、解析することが出来ません。 このような、元来コンパイラが解析することが出来ない「拡張された文法」 をコンパイラが理解できる「通常仕様のプログラムソースコード」に 変換する作業を行うのがプリコンパイラ(あるいはプリプロセッサ)です。
お礼
回答ありがとうございます。 コンパイラが解析することが出来ない「拡張された文法」を理解できるように変換することだったんですね。 とても分かりやすかったです! ありがとうございました。
- coolguys
- ベストアンサー率18% (351/1917)
#付く処理のことですね。 先にコンパイルしておく 自分で、記述した処理ではないですよね。 言い方はちょっと変かもしれないですが、 自分のソースコードをコンパイルする前に お約束として記述したようなことをコンパイルする という、感じですかね。
お礼
回答ありがとうございます。 皆さん本当に回答早いですね・・・。 とっても嬉しかったです。 また何かありましたらよろしくお願いします。
- akino4
- ベストアンサー率18% (35/185)
C言語の場合#includeなど#がつく部分をしょりします
お礼
こんなに早く回答いただけるなんて感激です。 ありがとうございます。 プログラムに関して本当に無知なのでこれからもお尋ねすることがあるかもしれません。 その時はまたよろしくお願いします。
お礼
ご回答ありがとうございます。 コンパイラごとに1つ以上のプリコンパイラがあるんですね。 参考になりました。 本当にありがとうございます。