C言語/概念モデル

C言語の文法や機能を説明する時「翻訳フェーズ3」といった標準C規格で定義した用語が出てきます。
ここでは、ISO/IEC 9899:2018(通称 C18)の §5.1 Conceptual models(概念モデル)を抄訳/引用し解説します。
1 C言語のプログラムは、すべてを一度に翻訳する必要はありません。 プログラムのテキストは、ソースファイルと呼ばれる単位で保管されています。この国際規格では、ソースファイル( source files )(またはプリプロセスファイル( preprocessing files ))と呼ばれる単位で保管されます。 ソースファイルは、前処理指令 #include によって含まれるすべてのヘッダーとソースファイルとともに、前処理翻訳単位( preprocessing translation unit )と呼ばれます。 前処理後の翻訳単位は、翻訳単位( translation unit )と呼ばれます。 以前に翻訳された翻訳単位は、個別に、またはライブラリとして保存することができます。 プログラムの各翻訳単位は、識別子が外部リンクされている関数の呼び出しや、識別子が外部リンクされているオブジェクトの操作、データファイルの操作などによって伝えます。 翻訳単位は別々に翻訳され、後にリンクされて実行可能なプログラムを生成することができます。
前方参照: 識別子の結合(linkages of identifiers 6.2.2)、外部定義(external definitions 6.9)、前処理指令(preprocessing directives 6.10)。
1 A C program need not all be translated at the same time. The text of the program is kept in units called source files, (or preprocessing files) in this International Standard. A source file together with all the headers and source files included via the preprocessing directive #include is known as a preprocessing translation unit. After preprocessing, a preprocessing translation unit is called a translation unit. Previously translated translation units may be preserved individually or in libraries. The separate translation units of a program communicate by (for example) calls to functions whose identifiers have external linkage, manipulation of objects whose identifiers have external linkage, or manipulation of data files. Translation units may be separately translated and then later linked to produce an executable program.
Forward references: linkages of identifiers (6.2.2), external definitions (6.9), preprocessing directives (6.10).
コンパイルという言葉こそ使っていませんが、「実行可能なプログラム( executable program )」について明言されているので、言語処理系はコンパイラとして実装されることが強く意識されています。
前処理翻訳単位( preprocessing translation unit )と翻訳単位( translation unit )は、規格の中で何度も出てきますが、
と一対一に考えることが出来ます。
1 翻訳の構文規則の中での優先順位は、以下のフェーズで規定されています)。

前方参照:国際文字名(universal character names 6.4.3)、字句要素(lexical elements 6.4)、前処理指令(preprocessing directives 6.10)、3文字表記(trigraph sequences 5.2.1.1)、外部定義(external definitions 6.9)。

1 The precedence among the syntax rules of translation is specified by the following phases.6)

Forward references: universal character names (6.4.3), lexical elements (6.4), preprocessing directives (6.10), trigraph sequences (5.2.1.1), external definitions (6.9).
6)Implementations shall behave as if these separate phases occur, even though many are typically folded together in practice. Source files, translation units, and translated translation units need not necessarily be stored as files, nor need there be any one-to-one correspondence between these entities and any external representation. The description is conceptual only, and does not specify any particular implementation.
7)As described in 6.4, the process of dividing a source file’s characters into preprocessing tokens is context-dependent. Forexample, see the handling of < within a #include preprocessing directive.
8)An implementation need not convert all non-corresponding source characters to the same execution character.
Diagnostics は <assert.h> の章題と同じですが、ここでは診断メッセージ(コンパイラの出すエラーやウォーニングのこと)を示しています。
は、字句解析・構文解析的には問題有りませんが、意味的には大問題ですね。
前方参照:オブジェクトの保存期間(6.2.4)、初期化(6.7.9)。
前方参照:用語の定義(7.1.1)、exit関数(7.22.4.4)。
前方参照:式 (6.5)、型修飾子 (6.7.3)、文 (6.8)、浮動小数点環境 <fenv.h> (7.6)、signal関数 (7.14)、ファイル (7.21.3)。
この項は、ISO/IEC 9899:2011(通称 C11)で追加されたので、C99の和訳であるJIS X 3010 プログラム言語Cには該当する項はありません。