No.4ベストアンサー
- 回答日時:
プリコンパイラとは名前の通り「コンパイラの前に使うもの」です。
コンパイラ型の言語ではまずソースをテキストファイルに人間が書き、コンパイラを通して実行ファイルを作っていきます。しかし、コンパイラが理解できるソースを直接全て人間が書くのはしばしば効率が悪かったり理解しづらかったりします。
そこで、ソースを書く時は人間に便利な仕様にしておいて、プリコンパイラでそれをコンパイラが理解できるソースに書き直すということをするわけです。
テキストエディタ
出力:人間が書いたソース
↓
プリコンパイラ
出力:コンパイラが理解できるソース
↓
コンパイラ
(出力:オブジェクトファイル)
(↓ )
(リンカ )
出力:実行ファイル
Cコンパイラとよく組み合わせて使われるプリコンパイラを挙げてみます。
Cプリコンパイラ
他のみなさんが既に挙げているように、主に#で始まる行を処理します。
いろいろなソースで共通して使われる部分を共有するための仕組み(include)や、マクロ処理、コンパイル時の条件分岐等、様々な処理をします。
C++プリコンパイラ
C++のソースをCのソースに変換します。本来C++コンパイラは存在しないのでCソースに変換してからCコンパイルにかけます。しかし、最近はC++コンパイラも存在するのでその場合はCプリコンパイラと大差ないと思います。
f2cプリコンパイラ
フォートランのソースをCのソースに変換します。需要の関係上Cコンパイラの研究が極端に進んだため、フォートランコンパイラを用意して使うよりもCソースに変換してからCコンパイラでコンパイルした方が性能がよかったり、メーカー側の開発環境の準備コストが低くすむといった現象の産物のようです。
この他の言語でも、コンパイラごとに1つ以上のプリコンパイラがあるといっても過言ではないと思います。
この回答へのお礼
お礼日時:2001/05/29 21:41
ご回答ありがとうございます。
コンパイラごとに1つ以上のプリコンパイラがあるんですね。
参考になりました。
本当にありがとうございます。
No.3
- 回答日時:
プリコンパイラは、プリプロセッサと同意です。
元来、例えば、C/C++コンパイラは、入力されたソースコード中に、
#define や #pragma などの記述があると、解析することが出来ません。
このような、元来コンパイラが解析することが出来ない「拡張された文法」
をコンパイラが理解できる「通常仕様のプログラムソースコード」に
変換する作業を行うのがプリコンパイラ(あるいはプリプロセッサ)です。
この回答へのお礼
お礼日時:2001/05/29 21:22
回答ありがとうございます。
コンパイラが解析することが出来ない「拡張された文法」を理解できるように変換することだったんですね。
とても分かりやすかったです!
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
0除算して、落ちるプログラムと...
-
graph.hがincludeできない
-
初心者はIDE使わないほうが良く...
-
sprintfを用いたフォーマット文...
-
変数(関数)名の頭に_
-
エクセルに入力した数値を出力...
-
volatile修飾について
-
C++ で、「)」が必要 というエ...
-
CPUが16bitでも32bitOSでコンパ...
-
makeのエラーについて
-
io.hをincludeするとそのような...
-
C++でアボート(Abort)で処理が...
-
【エラー】Cpadで初めてコンパイル
-
PICマイコンによる乱数の表示に...
-
どのプログラミング言語ででき...
-
g++ だと正常動作 ・ bcc32 だ...
-
65536は2の何乗なのでしょうか?
-
VBAで仕様書は書きますか?
-
正しい五十音順について
-
VBAの再計算が反映されない件に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
0除算して、落ちるプログラムと...
-
io.hをincludeするとそのような...
-
C++ で、「)」が必要 というエ...
-
C++でアボート(Abort)で処理が...
-
Visual C++とVisual C++.NETの違い
-
変数(関数)名の頭に_
-
fortranでのNaNについて
-
コンパイルできない
-
C++の Unhandled Exceptionにつ...
-
コンパイラの制限 : ヒープの領...
-
PICマイコンによる乱数の表示に...
-
CPUが16bitでも32bitOSでコンパ...
-
関数の戻り値による変数の初期化
-
Delphiの逆コンパイル
-
どのプログラミング言語ででき...
-
コンパイラフラグ(compiler fla...
-
コンパイラについて
-
FORTRAN→Cに翻訳
-
Eclipseの環境設定について
-
バイナリファイルとソースコー...
おすすめ情報