C言語から引き継がれた「トライグラフ (trigraph)」という機能は、ASCIIより小さなISO/IEC 646という文字コードでもプログラムが書けるように用意された機能で、いくつかの文字の代替表現を使用できるようにするものです。 トライグラフ表現 置き換え後の文字 ??= # ??/ \ ??' ^ ??( [ ??) ] ??! | ??< { ??> } ??- ~ 以下のトライグラフを使用したコードは、 ??=define arraycheck(a,b) a??(b??) ??!??! b??(a??) 以下のように置き換えられます: #define arraycheck(a,b) a[b] || b[a] 文字コードの問題がなくなった現代では、トライグラフは不要になりました。ユーザーにとってわかりにくいこともあり、多くのコンパイラがトライグラフをデフォルトで無効にしたり警告を