通信用語の基礎知識 IPv4
戻る
参加者募集中

トライグラフ

辞書:電算用語の基礎知識 プログラミング仕様編 (PTPROGS)
読み:トライグラフ
外語:trigraph 英語
品詞:名詞
2001/12/20 作成
2016/12/26 更新

三字一音、三重音字。C/C++の規格にある、3文字で1文字を表わすための規格。

CのソースをISO/IEC 646:1983の不変文字セットの範囲で記述するための悪名高い記法。??に続けて特定の文字を記述することで、ISO/IEC 646にない文字を表現する。

ISO/IEC 646しか使えないレガシーな環境でもCのプログラムが書けるように配慮されて導入された仕様である。

この仕様は、C++にもそのまま採用されている。

ISO/IEC 646の問題

ISO/IEC 646は、ASCIIの拡張として、ASCIIにある12文字を任意の文字に変えても良い、という規格である。

その変えても良いという文字に、# [ \ ] ^ ` { | } ~ というC/C++でよく使う文字が含まれており、そのままではCらしいコードが書けないと危惧されたことから、この仕様の導入が決定された。

一覧

トライグラフ表現置き換え後の文字
??=#
??/\
??'^
??([
??)]
??!|
??<{
??>}
??-~

現状

21世紀ともなった現在、現実問題としてISO/IEC 646しか使えないレガシーな環境でCソースをコンパイルする機会などほぼ皆無(?)である。欧米圏でもISO/IEC 8859-1の時代を通り過ぎ、既にUnicodeが主流となりISO/IEC 646が完全に過去となった今ですらなお廃止はされていない。

このため余計な解釈で意図しない文字が現われて混乱のもとになることのほうが多いが、ANSI準拠のためにはトライグラフを解釈できる必要がある。しかしトラブルの方が多いため、たいていのC/C++コンパイラーはオプションを付けて機能が有効になるようにしていることが多い。

GCCではデフォルト無効。-trigraphsオプションで有効になる。

clang/LLVMでもデフォルト向こうで、-Wtrigraphsで有効になる。

Microsoft C/C++では常に有効。?を\?とエスケープすることで解釈を抑止できる。

今後

既に公害でしかなくなったこの仕様は、C++では、C++1zあるいはC++17と呼ばれている策定中の仕様において、削除されることが議論されている。

まず現状、トライグラフには需要が存在せず、コードを書く妨げにしかなっていない。このために、N3981においてトライグラフを仕様から取り除く議論がなされることとなった。

用語の所属
C
C++
関連する用語
??
ISO/IEC 646

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.03 (16-May-2019)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club