エスケープシーケンス
エスケープシーケンスは文字列リテラルおよび文字リテラル内で一部の特殊な文字を表すために使用されます。
以下のエスケープシーケンスが利用可能です (処理系定義の意味を持つ追加のエスケープシーケンスが提供されることもあります)。
エスケープシーケンス | 説明 | 表現 |
---|---|---|
\' | 引用符 | 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 (C++11以上) | ユニバーサル文字名 (任意の Unicode 値) 複数の文字になる場合があります | コードポイント U+nnnn |
\Unnnnnnnn (C++11以上) | ユニバーサル文字名 (任意の Unicode 値) 複数の文字になる場合があります | コードポイント U+nnnnnnnn |
[編集]ノート
8進数のエスケープシーケンスのうち、 \0
は、ヌル終端文字列の終端のヌル文字を表すため、最も役に立ちます。
改行文字 \n
は、テキストモードの入出力で使用するとき、特別な意味を持ちます。 これは OS 固有の改行文字 (通常は1バイトまたはバイトのシーケンス) に変換されます。 代わりに長さフィールドで行をマークするシステムもあります。
8進数のエスケープシーケンスは3桁の制限を持ちますが、それより前に有効な8進数字でない最初の文字が現れれば、そこで終わります。
16進数のエスケープシーケンスは、長さの制限を持たず、有効な16進数字でない最初の文字で終わります。 単一の16進数のエスケープシーケンスによって表される値が、その文字列リテラルで使用される文字型 (char、 char16_t、 char32_t または wchar_t) の表現可能な値の範囲に収まらない場合、結果は未規定です。
ナロー文字列リテラルまたは16ビット文字列リテラル内のユニバーサル文字名は、複数文字に対応する場合があります。 例えば、 \U0001f34c は UTF-8 では4個の char コードユニット (\xF0\x9F\x8D\x8C) であり、 UTF-16 では2個の char16_t コードユニット (\uD83C\uDF4C) です。
ユニバーサル文字名が ISO/IEC 10646 のコードポイント (範囲 0x0-0x10FFFF、両端を含む) に対応しない場合、またはユニバーサル文字名がサロゲートコードポイント (範囲 0xD800-0xDFFF、両端を含む) に対応する場合、プログラムは ill-formed です。
疑問符のエスケープシーケンス \? は、文字列リテラルの内部でトライグラフが解釈されるのを防ぐために使用されます。 "??/" などの文字列は "\" としてコンパイルされますが、2つめの疑問符を "?\?/" のようにエスケープすると、 "??/" になります。
[編集]例
#include <cstdio> int main(){std::printf("This\nis\na\ntest\n\nShe said, \"How are you?\"\n");}
出力:
This is a test She said, "How are you?"
[編集]関連項目
エスケープシーケンス の C言語リファレンス |