Namespaces
Variants

Escape sequences

From cppreference.net
C++ language
General topics
Keywords
Escape sequences
Flow control
Conditional execution statements
Iteration statements (loops)
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications ( until C++17* )
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Storage duration specifiers
Initialization
Expressions
Alternative representations
Literals
Boolean - Integer - Floating-point
Character - String - nullptr (C++11)
User-defined (C++11)
Utilities
Attributes (C++11)
Types
typedef declaration
Type alias declaration (C++11)
Casts
Memory allocation
Classes
Class-specific function properties
Special member functions
Templates
Miscellaneous

이스케이프 시퀀스는 문자열 리터럴 문자 리터럴 내에서 특정 특수 문자를 표현하는 데 사용됩니다.

다음 이스케이프 시퀀스를 사용할 수 있습니다:

이스케이프
시퀀스
설명 표현
단순 이스케이프 시퀀스
\' 작은따옴표 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 (1~3개의 8진수 숫자)
\o{ n... } (C++23부터) 코드 유닛 n... (임의의 개수의 8진수 숫자)
\x n... 임의의 16진수 값 코드 유닛 n... (임의의 개수의 16진수 숫자)
\x{ n... } (C++23부터)
조건부 이스케이프 시퀀스 [1]
\ c 구현 정의 구현 정의
유니버설 문자 이름
\u nnnn 임의의 Unicode 값;
여러 코드 유닛을 생성할 수 있음
코드 포인트 U+ nnnn (4개의 16진수 숫자)
\u{ n... } (C++23부터) 코드 포인트 U+ n... (임의의 개수의 16진수 숫자)
\U nnnnnnnn 코드 포인트 U+ nnnnnnnn (8개의 16진수 숫자)
\N{ NAME } (C++23부터) 임의의 유니코드 문자 NAME 으로 명명된 문자 ( 아래 참조 )
  1. 조건부 이스케이프 시퀀스는 조건부 지원됩니다. 각 조건부 이스케이프 시퀀스의 문자 c basic source character set (until C++23) basic character set (since C++23) 의 구성원이며, 다른 이스케이프 시퀀스에서 \ 다음에 오는 문자가 아닙니다.

목차

유니버설 문자 이름의 범위

유니버설 문자 이름이 0x24( $ ), 0x40( @ ), 0x60( ` )가 아니고 0xA0보다 작은 코드 포인트에 해당하는 경우, 프로그램은 ill-formed입니다. 다시 말해, 기본 원본 문자 집합 의 구성원과 제어 문자(0x0-0x1F 및 0x7F-0x9F 범위)는 유니버설 문자 이름으로 표현할 수 없습니다.

(C++11까지)

기본 원본 문자 집합 의 구성원 또는 제어 문자에 해당하는 코드 포인트의 유니버설 문자 이름이 문자 리터럴 또는 문자열 리터럴 외부에 나타나는 경우, 프로그램은 ill-formed입니다.

유니버설 문자 이름이 서로게이트 코드 포인트(0xD800-0xDFFF 범위, 포함)에 해당하는 경우, 프로그램은 ill-formed입니다.

UTF-16/32 문자열 리터럴에서 사용된 유니버설 문자 이름이 ISO/IEC 10646 (0x0-0x10FFFF 범위, 포함)의 코드 포인트에 해당하지 않는 경우, 프로그램은 ill-formed입니다.

(C++11부터)
(C++20까지)

기본 원본 문자 집합 의 구성원 또는 제어 문자에 해당하는 코드 포인트의 유니버설 문자 이름이 문자 리터럴 또는 문자열 리터럴 외부에 나타나는 경우, 프로그램은 ill-formed입니다.

유니버설 문자 이름이 ISO/IEC 10646 (0x0-0x10FFFF 범위, 포함)의 코드 포인트에 해당하지 않거나 서로게이트 코드 포인트(0xD800-0xDFFF 범위, 포함)에 해당하는 경우, 프로그램은 ill-formed입니다.

(C++20부터)
(C++23까지)

기본 문자 집합 의 문자 또는 제어 문자의 스칼라 값에 해당하는 유니버설 문자 이름이 문자 리터럴 또는 문자열 리터럴 외부에 나타나는 경우, 프로그램은 ill-formed입니다.

유니버설 문자 이름이 변환 문자 집합 의 문자 스칼라 값에 해당하지 않는 경우, 프로그램은 ill-formed입니다.

(C++23부터)


명명된 유니버설 문자 이스케이프

\N{ n-char-sequence }
n-char-sequence - 하나 이상의 n-char
n-char - 변환 문자 집합 에 속하는 문자로, 닫는 중괄호 } 또는 개행 문자는 제외

위 구문의 유니버설 문자 이름은 명명된 유니버설 문자 입니다. 이는 n-char-sequence 가 해당 문자의 이름 또는 "control", "correction", "alternate" 유형의 문자 이름 별칭 중 하나와 동일한 경우, Unicode 표준 ( 4.8장 Name )의 해당 문자를 지정합니다. 그렇지 않으면 프로그램은 올바르지 않은 형태입니다.

이러한 별칭은 Unicode 문자 데이터베이스 NameAliases.txt 에 나열되어 있습니다. 이러한 이름이나 별칭 중 어느 것도 앞뒤 공백을 포함하지 않습니다.

유효한 n-char-sequence 는 대문자 라틴 문자 A부터 Z, 숫자, 공백, 하이픈-마이너스만 포함해야 합니다. 다른 문자들은 유니코드 문자 이름에 절대 나타나지 않으므로, n-char-sequence 에 이러한 문자가 나타나면 항상 프로그램을 올바르지 않은 형태로 만듭니다.

(C++23부터)

참고 사항

\ 0 는 가장 흔히 사용되는 8진수 이스케이프 시퀀스입니다. 왜냐하면 이것이 null-terminated strings 에서 종료 널 문자를 나타내기 때문입니다.

개행 문자 \n 텍스트 모드 I/O 에서 사용될 때 특별한 의미를 가집니다: 운영체제별 개행 표현으로 변환되며, 일반적으로 바이트나 바이트 시퀀스입니다. 일부 시스템은 길이 필드로 줄을 표시합니다.

8진수 이스케이프 시퀀스는 최대 세 자리의 8진수 숫자를 허용하지만, 그보다 빨리 유효한 8진수 숫자가 아닌 문자를 만나면 그 지점에서 종료됩니다.

16진수 이스케이프 시퀀스는 길이 제한이 없으며 유효한 16진수 숫자가 아닌 첫 번째 문자에서 종료됩니다. 단일 16진수 이스케이프 시퀀스로 표현된 값이 이 문자열 리터럴에 사용된 문자 형식( char , char8_t , (since C++20) char16_t , char32_t , (since C++11) 또는 wchar_t )이 나타내는 값의 범위에 맞지 않으면 결과는 지정되지 않습니다.

좁은 문자열 리터럴이나 16비트 문자열 리터럴에서 유니버설 문자 이름(universal character name)은 둘 이상의 코드 단위(code unit)에 매핑될 수 있습니다. 예를 들어, \U0001f34c 는 UTF-8에서 4개의 char 코드 단위( \xF0\x9F\x8D\x8C )이고, UTF-16에서는 2개의 char16_t 코드 단위( \xD83C\xDF4C )입니다.

(C++11부터)

물음표 이스케이프 시퀀스 \ ? 는 문자열 리터럴 내부에서 삼중문자(trigraphs) 가 해석되는 것을 방지하기 위해 사용됩니다: "??/" 와 같은 문자열은 " \" 로 컴파일되지만, 두 번째 물음표를 이스케이프한 "? \? /" 와 같은 경우에는 "??/" 가 됩니다. 삼중문자(trigraphs)가 C++에서 제거되었기 때문에, 물음표 이스케이프 시퀀스는 더 이상 필요하지 않습니다. 이는 C++14(및 이전 개정판) 및 C와의 호환성을 위해 유지됩니다. (C++17부터)

기능 테스트 매크로 표준 기능
__cpp_named_character_escapes 202207L (C++23) 명명된 유니버설 문자 이스케이프

예제

#include <iostream>
int main()
{
    std::cout << "This\nis\na\ntest\n\n";
    std::cout << "She said, \"Sells she seashells on the seashore?\"\n";
}

출력:

This
is
a
test
She said, "Sells she seashells on the seashore?"

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
CWG 505 C++98 백슬래시 다음에 오는 문자가 표에 지정된
문자 중 하나가 아닌 경우 동작이 정의되지 않음
조건부 지원으로 변경
(의미는 구현체 정의)

참고 항목

C 문서 참조: Escape sequence