エスケープシーケンス
エスケープシーケンスは、文字列リテラルおよび文字定数内で特定の特殊文字を表すために使用されます。
以下のエスケープシーケンスが利用可能です。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 |
\xn...
|
任意の 16 進値 | コードユニット n... (任意の数の 16 進数字) |
| ユニバーサル文字名 | ||
\unnnn (C99 以降) |
Unicode 値の許可された範囲内。 複数のコードユニットになる可能性があります。 |
コードポイント U+nnnn |
\Unnnnnnnn (C99 以降) |
Unicode 値の許可された範囲内。 複数のコードユニットになる可能性があります。 |
コードポイント U+nnnnnnnn |
ユニバーサル文字名の範囲ユニバーサル文字名が |
(C99以降) |
[編集] 注釈
\0 は、ヌル終端文字列における終端ヌル文字を表すため、最も一般的に使用される 8 進エスケープシーケンスです。
改行文字 \n は、テキストモード I/O で使用される場合に特別な意味を持ちます。OS 固有の改行バイトまたはバイトシーケンスに変換されます。
8 進エスケープシーケンスは 3 桁の 8 進数字の長さ制限がありますが、それより早く無効な 8 進数字でない文字に遭遇した場合、そこで終了します。
16 進エスケープシーケンスには長さの制限がなく、無効な 16 進数字でない最初の文字で終了します。単一の 16 進エスケープシーケンスで表される値が、この文字列リテラルまたは文字定数で使用される文字型(char、char8_t(C23 以降)、char16_t、char32_t(C11 以降)、または wchar_t)で表される値の範囲に収まらない場合、結果は未定義です。
|
狭い文字列リテラルまたは 16 ビット文字列リテラル(C11 以降)のユニバーサル文字名は、複数のコードユニットにマッピングされることがあります。例えば、\U0001f34c は、UTF-8 では 4 つの char コードユニット(\xF0\x9F\x8D\x8C)、UTF-16 では 2 つの char16_t コードユニット(\xD83C\xDF4C)(C11 以降)になります。 |
(C99以降) |
|
|
(C99以降) (C23まで) |
|
疑問符エスケープシーケンス \? は、文字列リテラル内でトライグラフが解釈されるのを防ぐために使用されます。例えば、"??/" という文字列は "\" にコンパイルされますが、2 番目の疑問符がエスケープされている場合、つまり "?\?/" のようになると、"??/" になります。 |
(C23まで) |
[編集] 例
#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?"
[編集] 参考文献
- C17標準 (ISO/IEC 9899:2018)
- 5.2.2 文字表示セマンティクス (p: 18-19)
- 6.4.3 ユニバーサル文字名 (p: 44)
- 6.4.4.4 文字定数 (p: 48-50)
- C11標準 (ISO/IEC 9899:2011)
- 5.2.2 文字表示セマンティクス (p: 24-25)
- 6.4.3 ユニバーサル文字名 (p: 61)
- 6.4.4.4 文字定数 (p: 67-70)
- C99標準 (ISO/IEC 9899:1999)
- 5.2.2 文字表示セマンティクス (p: 19-20)
- 6.4.3 ユニバーサル文字名 (p: 53)
- 6.4.4.4 文字定数 (p: 59-61)
- C89/C90標準 (ISO/IEC 9899:1990)
- 2.2.2 文字表示セマンティクス
- 3.1.3.4 文字定数
[編集] 関連項目
| C++ ドキュメント (エスケープシーケンス)
|