cでのコンパイルプロセス

コンパイルとは何ですか?

コンパイルは、ソースコードをオブジェクトコードに変換するプロセスです。 これはコンパイラの助けを借りて行われます。 コンパイラはソースコードに構文エラーまたは構造エラーがないかどうかをチェックし、ソースコードにエラーがない場合はオブジェクトコードを生成します。

cでのコンパイル処理

cでのコンパイル処理は、入力として取得したソースコードをオブジェクトコードまたはマシンコードに変換します。 コンパイルプロセスは、4つのステップに分けることができます。、前処理、編集、集まっていること、および連結。

プリプロセッサはソースコードを入力として受け取り、ソースコードからすべてのコメントを削除します。 プリプロセッサはプリプロセッサディレクティブを受け取り、それを解釈します。 たとえば、<stdioの場合。h>では、ディレクティブはプログラム内で利用可能であり、プリプロセッサはディレクティブを解釈し、このディレクティブを’stdioの内容に置き換えます。h’ファイル。

以下は、プログラムが実行可能な形式に変換される前に通過するフェーズです:

  • プリプロセッサ
  • コンパイラ
  • アセンブラ
  • リンカ

cでのコンパイルプロセス

プリプロセッサ

ソースコードはテキストエディタで書かれたコードであり、ソースコードファイルが与えられている。拡張子”。c”。 このソースコードは最初にプリプロセッサに渡され、プリプロセッサはこのコードを展開します。 コードを展開した後、展開されたコードがコンパイラに渡されます。

コンパイラ

プリプロセッサによって展開されたコードはコンパイラに渡されます。 コンパイラはこのコードをアセンブリコードに変換します。 または、Cコンパイラが前処理されたコードをアセンブリコードに変換すると言うことができます。

Assembler

アセンブリコードは、アセンブラを使用してオブジェクトコードに変換されます。 アセンブラによって生成されたオブジェクトファイルの名前は、ソースファイルと同じです。 DOSでのオブジェクトファイルの拡張子は’です。UNIXでは、拡張子は’o’です。 場合、ソースファイルの名前は”こんにちは.c’の名前のオブジェクトファイルが’こんにちは.obj’。

リンカ

主に、Cで書かれたすべてのプログラムはライブラリ関数を使用します。 これらのライブラリ関数はプリコンパイルされており、これらのライブラリファイルのオブジェクトコードは’で格納されています。lib'(または’.a’)拡張子。 リンカの主な作業は、ライブラリファイルのオブジェクトコードとプログラムのオブジェクトコードを結合することです。 私たちのプログラムが他のファイルで定義された関数を参照するときに状況が発生することがあります。 これらのファイルのオブジェクトコードをプログラムにリンクします。 したがって、リンカの仕事は、プログラムのオブジェクトコードをライブラリファイルやその他のファイルのオブジェクトコードにリンクすることで リンカの出力は実行可能ファイルです。 実行可能ファイルの名前はソースファイルと同じですが、拡張子だけが異なります。 DOSでは、実行可能ファイルの拡張子は’です。unixでは、実行可能ファイルには’a.out’という名前を付けることができます。 たとえば、プログラムでprintf()関数を使用している場合、リンカは関連するコードを出力ファイルに追加します。

例を見て理解しましょう。

こんにちは.c

しかし、我々はこれをフロー図、上記のプログラム:

上記フロー図は、以下の手順に従って取りを実行するプログラム:

  • まず、入力ファイル、こんにちは.cはプリプロセッサに渡され、プリプロセッサはソースコードを展開されたソースコードに変換します。 の延長拡大のソースコードするこんにちは.i.
  • 展開されたソースコードがコンパイラに渡され、コンパイラはこの展開されたソースコードをアセンブリコードに変換します。 の延長組立をコードするこんにちは.s.
  • このアセンブリコードはアセンブラーに送信され、アセンブラーはアセンブリコードをオブジェクトコードに変換します。
  • オブジェクトコードの作成後、リンカは実行可能ファイルを作成します。 その後、ローダーは実行のために実行可能ファイルをロードします。

コメントを残す

メールアドレスが公開されることはありません。