ISO C では、このような翻訳段階の順番が指定されています。
ソースファイル内のすべての 3 文字表記シーケンスが置換されます。ISO C にはちょうど 9 つの 3 文字表記シーケンスがありますが、これらは、不完全な文字セットの容認としてのためだけに考案されました。これらは 3 文字から成るシーケンスであり、ISO 646-1983 文字セットにない 1 つの文字を指定します。
|
これらのシーケンスは ISO C コンパイラによって理解される必要がありますが、推奨されていません。-xtransition オプションを使用するとき、移行モード (-Xt) では、ISO C コンパイラは 3 文字シーケンスを置換するたびに警告します (コメント内でも)。たとえば、次の例を考えてください。
/* comment *??/ /* still comment? */
??/ はバックスラッシュになります。この文字とそれに続く改行は削除されます。結果として、次のようになります。
/* comment */* still comment? */
2 行目の最初の / は、コメントの終わりです。次のトークンは * です。
バックスラッシュと改行文字の組み合わせがすべて削除されます。
ソースファイルが前処理トークンと空白文字のシーケンスに変換されます。各コメントは効果的に空白文字で置換されます。
すべての前処理指令が処理され、すべてのマクロ呼び出しが置換されます。#include でインクルードされた各ソースファイルは、内容が指令行に置換される前の初期段階で実行されます。
すべてのエスケープシーケンス (文字定数と文字列リテラル) が解釈されます。
隣接する文字列リテラルが連結されます。
すべての前処理トークンが通常のトークンに変換されます。コンパイラはこれらを正しく解析し、コードを生成します。
すべての外部オブジェクトと関数参照が解釈処理され、最終的なプログラムになります。