変換のフェーズ
C および C++ プログラムではそれぞれがプログラム テキストの一部を含む一つ以上のソース ファイルで構成されています。とともにソース ファイルは(#include ファイルのプリプロセッサ ディレクティブを使用して含まれていますが#if などの条件付きコンパイル ディレクティブによって削除されるコードのセクションを含むファイル) ではなく呼び出されます 「単位」。移動は
ソース ファイルは異なる時刻に変換できます。古いファイルに変換する (実際共通です。変換された翻訳単位が別のオブジェクト ファイルまたはライブラリ コード オブジェクトに処理できます。これらの別の変換された翻訳単位が実行可能プログラムまたはダイナミック リンク ライブラリを作成するにはリンク (DLL) します。リンカーへの入力として使用できるファイルの詳細についてはLINK の入力ファイル を参照してください。
翻訳単位がを使用して通信する :
外部リンケージを持つ関数の呼び出し。
外部リンケージを持つクラスのメンバー関数の呼び出し。
外部リンケージを持つオブジェクトの変更に指定します。
ファイルを直接変更。
プロセス間通信 (Microsoft Windows ベースのアプリケーションの場合のみ)。
次の一覧はコンパイラがファイルを変換する段階について説明します :
これはマッピング
ソース ファイルはソース内の文字の表現にマップされます。トライグラフのシーケンスはこのフェーズの単一文字に対する内部表現に変換されます。行の接続
バックス ラッシュ () で終了 \ 物理行の論理行を形成するソース ファイルの次の行のすべての行は改行文字でその後に結合します。これが空であるソース ファイルがバックス ラッシュに表示されない改行文字で終了する必要があります。トークン化
ソース ファイルはプリプロセスのトークンと空白文字を中断します。ソース ファイルのコメントは 1 個の空白文字と置き換えられます。改行文字は保持されます。前処理
プリプロセッサ ディレクティブが実行されマクロはソース ファイルに配置されます。#include のステートメントはインクルード テキストの前の 3 種類の移動の手順を使用して移動を開始します。文字セット マップ
すべてのソース文字セットのメンバーとエスケープ シーケンスは実行文字セットの対応するに変換されます。Microsoft C および C++ の場合ソースおよび実行はASCII 文字セットです。文字列の連結
すべての隣接する文字列が広リテラル文字列が連結されます。たとえば、"String " "concatenation" が "String concatenation" になります。変換
すべてのトークンは構文上意味を分析します ; これらのトークンはオブジェクト コードに変換されます。リンケージ
すべての外部参照は実行可能プログラムまたはダイナミック リンク ライブラリを作成するために解決されます。
コンパイラは構文エラーが発生した移動フェーズ中に警告やエラーを発行します。
リンカーはすべての外部参照を解決し一つ以上の個別に処理された翻訳単位を結合して標準ライブラリとともに実行可能プログラムまたは DLL を作成します。