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부터) 유니코드 허용 범위 내 값;
여러 코드 유닛으로 결과될 수 있음
코드 포인트 U+ nnnn
\U nnnnnnnn (C99부터) 유니코드 허용 범위 내 값;
여러 코드 유닛으로 결과될 수 있음
코드 포인트 U+ nnnnnnnn

목차

유니버설 문자 이름의 범위

유니버설 문자 이름이 0x24 ( '$' ), 0x40 ( '@' ), 0x60 ( '`' )에 해당하지 않고 0xA0 보다 작거나, 서로게이트 코드 포인트( 0xD800-0xDFFF 범위, 포함) , 또는 0x10FFFF 보다 큰 코드 포인트에 해당하는 경우 (C23부터) , 프로그램은 잘못된 형식입니다. 즉, 기본 소스 문자 집합 의 구성원과 제어 문자( 0x0-0x1F 0x7F-0x9F 범위)는 유니버설 문자 이름으로 표현할 수 없습니다.

(C99부터)

참고 사항

\ 0 는 널 종료 문자열에서 종료 널 문자를 나타내기 때문에 가장 일반적으로 사용되는 8진수 이스케이프 시퀀스입니다.

개행 문자 \n 텍스트 모드 I/O 에서 사용될 때 특별한 의미를 가집니다: 운영체제별 개행 바이트 또는 바이트 시퀀스로 변환됩니다.

8진수 이스케이프 시퀀스는 최대 세 자리의 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까지)

물음표 이스케이프 시퀀스 \ ? 는 문자열 리터럴 내부에서 트라이그래프 가 해석되는 것을 방지하기 위해 사용됩니다: "??/" 와 같은 문자열은 " \" 로 컴파일되지만, 두 번째 물음표가 이스케이프된 "? \? /" 와 같은 경우에는 "??/" 가 됩니다.

(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++ 문서 에서 Escape sequences 참조