エスケープシーケンス
エスケープシーケンスは文字列リテラルおよび文字定数内で一部の特殊な文字を表すために使用されます。
以下のエスケープシーケンスが利用可能です。 ISO C は、バックスラッシュに以下の一覧にない文字が続いた場合、診断を要求します。
| エスケープシーケンス | 説明 | 表現 |
|---|---|---|
\'
|
引用符 | ASCII エンコーディングではバイト値 0x27
|
\"
|
二重引用符 | ASCII エンコーディングではバイト値 0x22
|
\?
|
疑問符 | ASCII エンコーディングではバイト値 0x3f
|
\\
|
逆斜線 | ASCII エンコーディングではバイト値 0x5c
|
\a
|
オーディオベル | ASCII エンコーディングではバイト値 0x07
|
\b
|
後退 | ASCII エンコーディングではバイト値 0x08
|
\f
|
書式送り | ASCII エンコーディングではバイト値 0x0c
|
\n
|
改行 | ASCII エンコーディングではバイト値 0x0a
|
\r
|
復帰 | ASCII エンコーディングではバイト値 0x0d
|
\t
|
水平タブ | ASCII エンコーディングではバイト値 0x09
|
\v
|
垂直タブ | ASCII エンコーディングではバイト値 0x0b
|
\nnn
|
任意の8進数値 | バイト値 nnn
|
\xnn
|
任意の16進数値 | バイト値 nn
|
\unnnn(C11以上) |
基本文字集合にない Unicode の文字。 複数の文字になることもあります。 |
コードポイント U+nnnn
|
\Unnnnnnnn(C11以上) |
基本文字集合にない Unicode の文字。 複数の文字になることもあります。 |
コードポイント U+nnnnnnnn
|
ノート
8進数のエスケープシーケンスのうち、 \0 は、ヌル終端文字列の終端のヌル文字を表すため、最も役に立ちます。
改行文字 \n は、テキストモードの入出力で使用するとき、特別な意味を持ちます。 これは OS 固有の改行バイトまたはバイトシーケンスに変換されます。
8進数のエスケープシーケンスは3桁の制限を持ちますが、それより前に有効な8進数字でない文字が現れれば、そこで終わります。
16進数のエスケープシーケンスは、長さの制限を持たず、有効な16進数字でない最初の文字で終わります。 単一の16進数のエスケープシーケンスによって表される値が、その文字列リテラルで使用される文字型 (char、 char16_t、 char32_t、または wchar_t) の表現可能な値の範囲に収まらない場合、結果は未規定です。
ナロー文字列リテラルまたは16ビット文字列リテラル内のユニバーサル文字名は2個以上の文字にマップされることがあります。 例えば \U0001f34c は UTF-8 では4個の char (\xF0\x9F\x8D\x8C) になり、 UTF-16 では2個の char16_t (\uD83C\uDF4C) になります。
疑問符のエスケープシーケンス \? は、文字列リテラルの内部でトライグラフが解釈されるのを防ぐために使用されます。 "??/" などの文字列は "\" としてコンパイルされますが、2つめの疑問符を "?\?/" のようにエスケープすると、 "??/" になります。
例
#include <stdio.h>
int main(void)
{
printf("This\nis\na\ntest\n\nShe said, \"How are you?\"\n");
}
出力:
This
is
a
test
She said, "How are you?"
参考文献
- C11 standard (ISO/IEC 9899:2011):
- 5.2.2 Character display semantics (p: 24-25)
- 6.4.4.4 Character constants (p: 67-70)
- C99 standard (ISO/IEC 9899:1999):
- 5.2.2 Character display semantics (p: 19-20)
- 6.4.4.4 Character constants (p: 59-61)
- C89/C90 standard (ISO/IEC 9899:1990):
- 2.2.2 Character display semantics
- 3.1.3.4 Character constants
関連項目
エスケープシーケンス の C++リファレンス
|