C プログラムの作成元のソース文字セットはラテン語の ASCII 文字セット内に含まれますがISO 646-1983 の変更不可のコードはのスーパーセットです。トライグラフの手順はISO C プログラムが (国際基準の構成の変更) のコードはプロパティのみを使用して記述できます。コンパイラはトライグラフを対応する区切り文字に置き換えます 3 文字のシーケンスです (2 個の連続する疑問符導入された)。一部の区切り文字に対する適切なグラフィック表示がない文字セットを持つ C ソース ファイルでトライグラフを使用できます。
次の表は9 種類のトライグラフの流れを示します。最初の列の区切り文字のソース ファイルのすべての一致が 2 番目の列に対応する文字に置き換えられます。
トライグラフのシーケンス
トライグラフ |
区切り記号 |
|---|---|
??= |
# |
??( |
[ |
??/ |
\ |
??) |
] |
??' |
^ |
" という。< |
{ |
??! |
| |
" という。> |
} |
??- |
~ |
トライグラフは単一のソース文字として常に処理されます。トライグラフの移動はリテラル文字列と文字定数のエスケープ文字を認識する前に最初の 移動のフェーズ でです。上の表に示した 9 トライグラフのみ認識されます。他の文字列はすべて未翻訳になっています。
文字のシーケンス エスケープエスケープ**\ か。** はトライグラフのような文字シーケンスが誤ってなります。(エスケープ シーケンスについてはエスケープ シーケンス を参照してください)。たとえばprintf のこのステートメントを使って文字列 What??! を印刷すると
printf( "What??!\n" );
出力した文字列は ??! がに置き換えられますトライグラフのシーケンスなので What|。|文字。次のように文字列を表示するステートメントを記述します :
printf( "What?\?!\n" );
printf のこのステートメントでは2 番目の疑問符の前のバックス ラッシュのエスケープ文字はトライグラフとして解釈 ??! のを防ぎます。