本の虫さんのC++0x本査読と並行してC++0xの規格書にも目を通していて気がついたのがTrigraph。
この存在を私は規格書を読むまで知らなかった。
Trigraphとは2文字のクエスチョンマーク(??)+1文字の合計3文字で1文字を表すものである。
Trigraph | 文字 |
---|---|
??= | # |
??/ | (バックスラッシュ) |
??' | ^ |
??( | [ |
??) | ] |
??! | | |
??< | { |
??> | } |
??- | ~ |
使用例(規格書より引用)
??=define arraycheck(a,b) a??(b??) ??!??! b??(a??)
becomes
#define arraycheck(a,b) a[b] || b[a]
使い方はわかるのだがこのTrigraphはなぜ必要なのだろうか。
規格書には理由は何も書いていない。
調べてみたらTrigraphで入力できる文字コードはISO-646規格の各国で任意指定できる部分であることがわかった。
違う文字を指定している国でもTrigraphでソースコードを書けるようにしているのであった。
日本ではバックスラッシュがそうなるね。まあそのまま\で入力してしまっているけど。