トライグラフ
C言語におけるトライグラフ (英語: trigraph) とは、ISO 646 に共通して含まれる文字だけでソースコードを書くための表記法である。
目次 |
概要 [編集]
C言語のソースコードはASCIIの文字セットを用いて表記されるが、ISO 646で自由に文字を割り当てられる領域の文字まで使う文法となっている。特に、括弧類が別の文字に置き換わっているとソースコードの表記がしづらくなるので、ISO 646で自由割り当てでない文字を3つ組み合わせることで、それらの文字を表すこととした。これがトライグラフである[1]。
JIS X 3010-1993では「3文字表記」JIS X 3014:2003では「三つ組表示」としており、定訳がないことからもっぱら「トライグラフ」とカタカナで書かれる。
一覧 [編集]
ISO 646 で文字が不定のコードは10あるが、そのうち「$」はC言語では使用しないため、トライグラフはそのうち9文字に規定されている[1]。
| トライグラフの表記 | 表される文字 |
|---|---|
??= |
# |
??( |
[ |
??/ |
\ |
??) |
] |
??' |
^ |
??< |
{ |
??! |
| |
??> |
} |
??- |
~ |
処理 [編集]
トライグラフの処理は、エスケープシーケンスやトークンの解釈に先立って行われる[1]ため、文字列内の表記も置き換わることとなる。文字列中にトライグラフと一致する3文字を書けるようにするために、単に?1文字を表すエスケープシーケンスである\?が用意されている[2]。例えば、"?\?="と書いた場合、トライグラフとしての処理は行われず、その後にエスケープシーケンスが展開され、"??="という文字列となる。
利用 [編集]
コンピュータで利用可能な文字コードは拡張が続き、1984年には8ビットのISO 8859-1が、1990年代以降は16ビット以上のUnicodeが制定された。これらのコードでは最初の128文字がASCIIと一致しているため、トライグラフを使わなくてもすべての文字を表記できる。
GCC[3]やVisual C++ 2010[4]など、明示的に有効にしなければトライグラフが無効となっている処理系もある。また、Borland C++ Compilerでは、コンパイル速度を上げるために、トライグラフ処理に専用のプリプロセッサを使うことになっている[5]。さらに、トライグラフの使用について警告を出すことのできる処理系もある[6][7]など、21世紀初頭に至ってはほとんど使われない機能と化している。
脚注 [編集]
- ^ a b c Trigraphs マイクロソフト(英語)、2011年4月25日閲覧。
- ^ Escape Sequences マイクロソフト(英語)、2011年4月25日閲覧。
- ^ C Dialect Options GCCマニュアル(英語)、フリーソフトウェア財団、2011年4月25日閲覧。
- ^ Visual C++ での互換性に影響する変更点 マイクロソフト、2011年4月25日閲覧。
- ^ Borland C++ Compiler FAQ エンバカデロ・テクノロジーズ、2011年4月25日閲覧
- ^ Warning Options GCCマニュアル(英語)、フリーソフトウェア財団、2011年4月25日閲覧。
- ^ コンパイラの警告 (レベル 4) C4837 マイクロソフト、2011年4月25日閲覧。