トライグラフ

C言語におけるトライグラフ (・) とは、ISO 646 に共通して含まれる文字だけでソースコードを書くための表記法である。

概要 
C言語のソースコードはASCIIの文字セットを用いて表記されるが、ISO 646で自由に文字を割り当てられる領域の文字まで使う文法となっている。特に、括弧類が別の文字に置き換わっているとソースコードの表記がしづらくなるので、ISO 646で自由割り当てでない文字を3つ組み合わせることで、それらの文字を表すこととした。これが3文字表記である。

一覧 
ISO 646 で文字が不定のコードは10あるが、そのうち「$」はC言語では使用しないため、3文字表記はそのうち9文字に規定されている。

処理 
3文字表記の処理は、エスケープシーケンスや字句の解釈に先立って行われるため、文字列内の表記も置き換わることとなる。文字列中に3文字表記と一致する3文字を書けるようにするために、単に?1文字を表すエスケープシーケンスである\?が用意されている。例えば、"?\?="と書いた場合、3文字表記としての処理は行われず、その後にエスケープシーケンスが展開され、"??="という文字列となる。また、文字列リテラルを2つの?の間で分離する、という回避法も存在する。

利用 
計算機で利用可能な文字コードは拡張が続き、1984年には8ビットのISO 8859-1が、1990年代以降は16ビット以上のUnicodeが制定された。これらのコードでは最初の128文字がASCIIと一致しているため、3文字表記を使わなくてもすべての文字を表記できる。

GCCやVisual C++ 2010など、明示的に有効にしなければ3文字表記が無効となっている処理系もある。また、Borland C++ Compilerでは、コンパイル速度を上げるために、3文字表記処理に専用のプリプロセッサを使うことになっている。さらに、3文字表記の使用について警告を出すことのできる処理系もあるなど、21世紀初頭に至っては、意図せずに3文字表記を書いてしまうことによる問題点が注意喚起なされるような状況と化している。

3文字表記の廃止 
C++0x (後のC++11) では3文字表記を廃止予定 (deprecated) とすることが提案されたが、IBM の (ほかの C++ 使用者を代弁する目的もあった) 反対により、一旦は維持されることとなった。しかし、C++17 における再度の提案では廃止予定 (deprecation) ではなく廃止 (removal) が提案され、これが標準化委員会の投票で承認されたことから、IBM の反対にもかかわらず3文字表記は廃止されることとなった。3文字表記を使用した既存のコードは、ソースファイルから3文字表記を解釈し、3文字表記を含まない基本文字セットに変換することでサポートされる。

関連項目
エスケープ文字

脚注

出典

参考文献 
 

プログラミング言語の構文
C言語
文字コード