Oracle® Solaris Studio 12.4: C ユーザーガイド

印刷ビューの終了

更新: 2014 年 12 月
 
 

6.4.1 ISO C の翻訳段階

ISO C では、このような翻訳段階の順番が指定されています。

ソースファイル内のすべての 3 文字表記シーケンスが置換されます。ISO C にはちょうど 9 つの 3 文字表記シーケンスがありますが、これらは、不完全な文字セットの容認としてのためだけに考案されました。これらは 3 文字から成るシーケンスであり、ISO 646-1983 文字セットにない 1 つの文字を指定します。

表 6-1  3 文字シーケンス
3 文字シーケンス
変換後
??=
#
??-
~
??(
[
??)
]
??!
|
??<
{
??>
}
??/
\
??’
^

これらのシーケンスは ISO C コンパイラによって理解される必要がありますが、推奨されていません。-xtransition オプションを使用するとき、移行モード (-Xt) では、ISO C コンパイラは 3 文字シーケンスを置換するたびに警告します (コメント内でも)。たとえば、次の例を考えてください。

/* comment *??/
/* still comment? */

??/ はバックスラッシュになります。この文字とそれに続く改行は削除されます。結果として、次のようになります。

/* comment */* still comment? */

2 行目の最初の / は、コメントの終わりです。次のトークンは * です。

  1. バックスラッシュと改行文字の組み合わせがすべて削除されます。

  2. ソースファイルが前処理トークンと空白文字のシーケンスに変換されます。各コメントは効果的に空白文字で置換されます。

  3. すべての前処理指令が処理され、すべてのマクロ呼び出しが置換されます。#include でインクルードされた各ソースファイルは、内容が指令行に置換される前の初期段階で実行されます。

  4. すべてのエスケープシーケンス (文字定数と文字列リテラル) が解釈されます。

  5. 隣接する文字列リテラルが連結されます。

  6. すべての前処理トークンが通常のトークンに変換されます。コンパイラはこれらを正しく解析し、コードを生成します。

  7. すべての外部オブジェクトと関数参照が解釈処理され、最終的なプログラムになります。