Cプログラミング言語に関するK&Rブックの第2章(定数という名前のサブセクション2.3)から:
特定の文字は、\n (改行) などのエスケープ シーケンスを使用して、文字定数および文字列定数で表すことができます。これらのシーケンスは 2 つの文字のように見えますが、1 つのみを表しています。さらに、任意のバイト サイズのビット パターンを次のように指定できます。
′\ooo′
ここで、ooo は 1 ~ 3 桁の 8 進数 (0...7) または
′\xhh′
ここで、hh は 1 つ以上の 16 進数 (0...9、a...f、A...F) です。だから私たちは書くかもしれません
#define VTAB ′\013′ /* ASCII vertical tab */
#define BELL ′\007′ /* ASCII bell character */
or, in hexadecimal,
#define VTAB ′\xb′ /* ASCII vertical tab */
#define BELL ′\x7′ /* ASCII bell character */
私を混乱させる部分は、次の文言です(私の強調): ooo は1 から 3桁の 8 進数 (0...7)です。8 進数が 3 桁の場合、必要なビット数は 9 (各桁に 3) になり、文字に必要なバイト長を超えます。確かに私はここで何かが欠けています。私が見逃しているのは何ですか?