Escape sequences
이스케이프 시퀀스는 문자열 리터럴 과 문자 리터럴 내에서 특정 특수 문자를 표현하는 데 사용됩니다.
다음 이스케이프 시퀀스를 사용할 수 있습니다:
|
이스케이프
시퀀스 |
설명 | 표현 |
|---|---|---|
| 단순 이스케이프 시퀀스 | ||
\'
|
작은따옴표 |
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
으로 명명된 문자
(
아래 참조
)
|
-
↑
조건부 이스케이프 시퀀스는 조건부 지원됩니다. 각 조건부 이스케이프 시퀀스의 문자
c는 basic source character set (until C++23) basic character set (since C++23) 의 구성원이며, 다른 이스케이프 시퀀스에서\다음에 오는 문자가 아닙니다.
목차 |
유니버설 문자 이름의 범위
|
유니버설 문자 이름이 0x24(
|
(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-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) | 명명된 유니버설 문자 이스케이프 |
예제
출력:
This is a test She said, "Sells she seashells on the seashore?"
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| CWG 505 | C++98 |
백슬래시 다음에 오는 문자가 표에 지정된
문자 중 하나가 아닌 경우 동작이 정의되지 않음 |
조건부 지원으로 변경
(의미는 구현체 정의) |
참고 항목
|
C 문서
참조:
Escape sequence
|