Namespaces
Variants

Escape sequences

From cppreference.net

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

以下のエスケープシーケンスが利用可能です。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
\x n... 任意の16進数値 コードユニット n... (任意の桁数の16進数)
ユニバーサル文字名
\u nnnn (C99以降) Unicode の許容範囲内の値;
複数のコードユニットになる可能性あり
コードポイント U+ nnnn
\U nnnnnnnn (C99以降) Unicode の許容範囲内の値;
複数のコードユニットになる可能性あり
コードポイント U+ nnnnnnnn

目次

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

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

(C99以降)

注記

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

改行文字 \n は、 text mode 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以降)

ISO/ISC 10646で未定義である 0x10FFFF より大きいコードポイントに対応するユニバーサル文字名は、 文字定数 および 文字列リテラル で使用可能である。このような使用法は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++ ドキュメント for エスケープシーケンス