変換フェーズPhases of translation

C および C++ プログラムは、それぞれがプログラムのテキストの一部を含む 1 つ以上のソース ファイルで構成されます。C and C++ programs consist of one or more source files, each of which contains some of the text of the program. ソースファイルとそのインクルードファイル#includeプリプロセッサディレクティブを使用してインクルードされたファイル、など#ifの条件付きコンパイルディレクティブによって削除されたコードセクションは含まれません。翻訳単位A source file, together with its include files, files that are included using the #include preprocessor directive, but not including sections of code removed by conditional-compilation directives such as #if, is called a translation unit.

ソースファイルは、異なるタイミングで変換できます。Source files can be translated at different times. 実際には、古いファイルのみを変換するのが一般的です。In fact, it's common to translate only out-of-date files. 変換された翻訳単位は個別のオブジェクト ファイルまたはオブジェクト コード ライブラリに処理できます。The translated translation units can be processed into separate object files or object-code libraries. 次に、変換された各翻訳単位は、実行可能プログラムやダイナミック リンク ライブラリ (DLL) を形成するためにリンクされます。These separate, translated translation units are then linked to form an executable program or a dynamic-link library (DLL). リンカーへの入力として使用できるファイルの詳細については、「 LINK input files」を参照してください。For more information about files that can be used as input to the linker, see LINK input files.

翻訳単位は次を使用して通信できます。Translation units can communicate using:

  • 外部リンケージを持つ関数の呼び出し。Calls to functions that have external linkage.

  • 外部リンケージを持つクラス メンバー関数の呼び出し。Calls to class member functions that have external linkage.

  • 外部リンケージを持つオブジェクトの直接的な変更。Direct modification of objects that have external linkage.

  • ファイルの直接的な変更。Direct modification of files.

  • プロセス間通信 (Microsoft Windows ベースのアプリケーションのみ)。Interprocess communication (for Microsoft Windows-based applications only).

次の一覧では、コンパイラがファイルを変換するフェーズについて説明します。The following list describes the phases in which the compiler translates files:

文字のマッピングCharacter mapping
ソース ファイルの文字はソースの内部表現にマップされます。Characters in the source file are mapped to the internal source representation. トライグラフ シーケンスはこのフェーズの単一文字の内部表現に変換されます。Trigraph sequences are converted to single-character internal representation in this phase.

ラインスプライスLine splicing
円記号 ( \ ) で終わるすべての行の直後に改行文字が続くと、ソースファイルの次の行と結合され、物理的な行から論理行が形成されます。All lines ending in a backslash (\) immediately followed by a newline character are joined with the next line in the source file, forming logical lines from the physical lines. 空でない場合、ソースファイルは、円記号ではなく改行文字で終わる必要があります。Unless it's empty, a source file must end in a newline character that's not preceded by a backslash.

分割Tokenization
ソース ファイルはプリプロセッサ トークンと空白文字に分割されます。The source file is broken into preprocessing tokens and white-space characters. ソース ファイル内のコメントは、それぞれ 1 個の空白文字と置き換えられます。Comments in the source file are replaced with one space character each. 改行文字は保持されます。Newline characters are retained.

前処理Preprocessing
前処理ディレクティブが実行され、マクロがソース ファイルに展開されます。Preprocessing directives are executed and macros are expanded into the source file. #include ステートメントは、インクルードされたテキストで前の 3 つの書き換え手順から開始する変換を呼び出します。The #include statement invokes translation starting with the preceding three translation steps on any included text.

文字セットのマッピングCharacter-set mapping
すべてのソース文字セット メンバーとエスケープ シーケンスは、実行文字セットの同等のものに変換されます。All source character set members and escape sequences are converted to their equivalents in the execution character set. Microsoft C および C++ にとって、ソース文字セットと実行文字セットはいずれも ASCII 文字セットです。For Microsoft C and C++, both the source and the execution character sets are ASCII.

文字列の連結String concatenation
すべての隣接する文字列とワイド文字列リテラルは連結されます。All adjacent string and wide-string literals are concatenated. たとえば、"String " "concatenation""String concatenation" になります。For example, "String " "concatenation" becomes "String concatenation".

変換Translation
すべてのトークンは、構文的および意味的に分析され、オブジェクト コードに変換されます。All tokens are analyzed syntactically and semantically; these tokens are converted into object code.

シーLinkage
すべての外部参照は実行可能プログラムまたはダイナミック リンク ライブラリを作成するために解決されます。All external references are resolved to create an executable program or a dynamic-link library.

コンパイラは、構文エラーを検出した変換のフェーズ中に警告やエラーを発行します。The compiler issues warnings or errors during phases of translation in which it encounters syntax errors.

リンカーは、すべての外部参照を解決し、1 つ以上の個別に処理された翻訳単位を結合して、標準ライブラリと共に実行可能プログラムまたは DLL を作成します。The linker resolves all external references and creates an executable program or DLL by combining one or more separately processed translation units along with standard libraries.

関連項目See also

プリプロセッサPreprocessor