C++の三重音字(トリグラフ)とは?歴史的背景と置換一覧を解説
三重音字(トリグラフ)とは
ISO-646文字セットには、C言語の構文で使われる文字のすべてが含まれているわけではありません。そのため、キーボードやディスプレイの一部が特定の文字を扱えないシステムが存在していました。
この問題を解決するために考案されたのが「三重音字(トリグラフ/trigraph)」です。これは、3文字の組み合わせで1つの文字を表現する記法であり、C言語では他のどの処理よりも先に、ソースコード内に現れた以下の3文字の並び(「トリグラフ列」)が、対応する1文字に置き換えられます。
| トリグラフ | 置換後の文字 | トリグラフ | 置換後の文字 | トリグラフ | 置換後の文字 |
|---|---|---|---|---|---|
| ??= | # | ??( | [ | ??< | { |
| ??/ | \ | ??) | ] | ?> | } |
| ??' | ^ | ??! | | | ??- | ~ |
なぜトリグラフは存在するのか
トリグラフが存在する理由は、ほとんどが歴史的なものです。現在では、ほとんどの言語向けの最新キーボードでこれらの文字すべてを入力できるため、あまり意識されることはありません。
しかし、かつては一部の欧州諸国のキーボードでは、# や [ ] { } などの記号を入力できない環境がありました。こうした環境でもC言語のプログラムを書けるようにする目的で、トリグラフが考案されたのです。
現在の扱い
C++では、トリグラフはC++11で非推奨(deprecated)となり、C++17で言語仕様から削除されました。そのため、モダンなC++コードにおいてトリグラフを目にすることはまずありません。ただし、古いソースコードや移植性を重視した歴史あるコードベースを読む際には、その存在を知っておくと役立ちます。
-
C++のgetline関数の使い方を解説!文字列入力の基本とサンプルコード
C++のgetline関数は、ストリームから書式なし入力として文字を抽出し、C言語形式の文字列(C文字列)として指定した配列に格納するために使用されます。文字の抽出は、区切り文字が検出されるか、n文字(終端のNULL文字「\0」を含む)がsに書き込まれるまで続けられます。 宣言 basic_istream& getline (char_type* s, streamsize n); basic_istream& getline (char_type* s, streamsize n, char_type delim); パラメータ s:文字配列へのポインタです。抽出された文字
-
C++で文字列内の英字の大文字・小文字を切り替える方法
このプログラムは、文字列に含まれるすべての英字について、大文字と小文字を入れ替える(トグルする)処理を行います。C++の標準ライブラリには toupper() や tolower() といった便利な関数が用意されており、同様の処理は簡単に実現できます。しかし本記事では、ASCIIコードの値を直接計算することで大文字・小文字を変換する方法を解説します。アルゴリズムSTART Step-1: char型の配列を宣言する Step-2: 各文字のASCII値が A(65) 以上 Z(90) 以下かどうかを判定する Step-3: 各文字のASCII値が a(97) 以上 z(