名前空間
変種
操作

エスケープシーケンス

From cppreference.com
< c‎ | language

エスケープシーケンスは、文字列リテラルおよび文字定数内で特定の特殊文字を表すために使用されます。

以下のエスケープシーケンスが利用可能です。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

目次

ユニバーサル文字名の範囲

ユニバーサル文字名が 0x24'$')、0x40'@')、または 0x60'`')ではなく、0xA0 未満のコードポイント、またはサロゲートコードポイント(範囲 0xD800-0xDFFF、含む)、または 0x10FFFF より大きい、つまり Unicode コードポイントではない場合(C23 以降)に対応する場合、プログラムは不正形式となります。言い換えると、基本ソース文字セットのメンバーおよび制御文字(範囲 0x0-0x1F および 0x7F-0x9F)は、ユニバーサル文字名で表現できません。

(C99以降)

[編集] 注釈

\0 は、ヌル終端文字列における終端ヌル文字を表すため、最も一般的に使用される 8 進エスケープシーケンスです。

改行文字 \n は、テキストモード I/O で使用される場合に特別な意味を持ちます。OS 固有の改行バイトまたはバイトシーケンスに変換されます。

8 進エスケープシーケンスは 3 桁の 8 進数字の長さ制限がありますが、それより早く無効な 8 進数字でない文字に遭遇した場合、そこで終了します。

16 進エスケープシーケンスには長さの制限がなく、無効な 16 進数字でない最初の文字で終了します。単一の 16 進エスケープシーケンスで表される値が、この文字列リテラルまたは文字定数で使用される文字型(charchar8_t(C23 以降)char16_tchar32_t(C11 以降)、または wchar_t)で表される値の範囲に収まらない場合、結果は未定義です。

狭い文字列リテラルまたは 16 ビット文字列リテラル(C11 以降)のユニバーサル文字名は、複数のコードユニットにマッピングされることがあります。例えば、\U0001f34c は、UTF-8 では 4 つの char コードユニット(\xF0\x9F\x8D\x8C、UTF-16 では 2 つの char16_t コードユニット(\xD83C\xDF4C(C11 以降)になります。

(C99以降)

0x10FFFF を超えるコードポイント(ISO/ISC 10646 で未定義)に対応するユニバーサル文字名は、文字定数および文字列リテラルで使用できます。このような使用は C++20 では許可されていません。

(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++ ドキュメントエスケープシーケンス
English 日本語 中文(简体) 中文(繁體)