Namespaces
Variants

std:: vprint_unicode, std:: vprint_unicode_buffered

From cppreference.net
< cpp ‎ | io
Print functions
Print functions
(C++23)
(C++23)
vprint_unicode vprint_unicode_buffered
(C++23) (C++23)
헤더에 정의됨 <print>
void vprint_unicode ( std:: FILE * stream,
std:: string_view fmt, std:: format_args args ) ;
(1) (C++23부터)
void vprint_unicode_buffered ( std:: FILE * stream,
std:: string_view fmt, std:: format_args args ) ;
(2) (C++23부터)
void vprint_unicode_buffered ( std:: string_view fmt, std:: format_args args ) ;
(3) (C++23부터)

형식 문자열 fmt 에 따라 args 를 포맷하고, 결과를 출력 스트림에 기록합니다.

1) 다음 작업을 순서대로 수행합니다:
  1. stream 을 잠급니다.
  2. fmt 에 지정된 규격에 따라 args 로 제공된 형식화 인수의 문자 표현을 out 으로 정의합니다.
  3. out stream 에 기록합니다:
  • stream 네이티브 유니코드 API 를 통해서만 유니코드를 표시할 수 있는 터미널을 참조하는 경우, stream 을 플러시하고 네이티브 유니코드 API를 사용하여 out 을 터미널에 기록합니다.
  • 그렇지 않은 경우, 수정되지 않은 out stream 에 기록합니다.
함수 종료 시 무조건 stream 을 잠금 해제합니다.
다음 조건 중 하나라도 충족되면, 동작은 정의되지 않습니다:
  • stream 가 유효한 출력 C 스트림 포인터가 아닌 경우.
  • out 에 네이티브 유니코드 API를 사용할 때 유효하지 않은 유니코드 코드 유닛 이 포함된 경우.
2) 다음 코드와 동등함: std:: string out = std:: vformat ( fmt, args ) ;
std :: vprint_unicode ( stream, "{}" , std:: make_format_args ( out ) ) ;
.
3) 다음에 해당함 std :: vprint_unicode_buffered ( stdout , fmt, args ) .


출력 스트림에 문자를 기록한 후, 관찰 가능한 체크포인트 를 설정합니다.

(since C++26)

목차

매개변수

stream - 출력할 출력 파일 스트림
fmt - 형식 문자열을 나타내는 객체. 형식 문자열은 다음으로 구성됩니다:
  • 일반 문자( { } 제외), 출력에 변경 없이 복사됨
  • 이스케이프 시퀀스 { { } } , 출력에서 각각 { } 로 치환됨
  • 치환 필드

각 치환 필드는 다음 형식을 가집니다:

{ arg-id (optional) } (1)
{ arg-id (optional) : format-spec } (2)
1) 형식 명세가 없는 치환 필드
2) 형식 명세가 있는 치환 필드
arg-id - 서식 지정에 사용할 인수의 args 내 인덱스를 지정함; 생략하면 인수가 순서대로 사용됨

형식 문자열 내 arg-id 는 모두 명시되거나 모두 생략되어야 함. 수동 및 자동 인덱싱을 혼합하는 것은 오류입니다.

format-spec - 해당 인수에 대한 std::formatter 특수화에 의해 정의된 형식 명세. } 로 시작할 수 없음

(C++23부터)
(C++26부터)
  • 다른 서식 가능 타입의 경우, 형식 명세는 사용자 정의 formatter 특수화에 의해 결정됨
args - 서식 지정할 인수들

예외

참고 사항

C++ 표준은 구현자들이 out 에 유효하지 않은 유니코드 코드 단위가 포함된 경우 진단 메시지를 생성하도록 권장합니다.

POSIX에서 터미널에 쓰기는 일반적인 표준 I/O 함수를 사용하여 수행되므로, 터미널을 다른 파일 스트림과 다르게 취급할 필요가 없습니다.

Windows에서 스트림이 터미널을 참조하는 경우는 GetConsoleMode ( _get_osfhandle ( _fileno ( stream ) ) ) 가 0이 아닌 값을 반환할 때입니다(관련 Windows 문서: GetConsoleMode , _get_osfhandle , 및 _fileno 참조). Windows의 기본 유니코드 API는 WriteConsoleW 입니다.

네이티브 유니코드 API 호출에 트랜스코딩이 필요한 경우, 유효하지 않은 코드 유닛은 U+FFFD REPLACEMENT CHARACTER로 대체됩니다("The Unicode Standard - Core Specification", Chapter 3.9 참조).

기능 테스트 매크로 표준 기능
__cpp_lib_print 202207L (C++23) 형식화된 출력
202403L (C++26)
(DR23)
버퍼링되지 않은 형식화된 출력
202406L (C++26)
(DR23)
더 많은 형식화 가능 타입에 대한 버퍼링되지 않은 형식화된 출력 활성화
__cpp_lib_format 202207L (C++23) std::basic_format_string 노출

예제

결함 보고서

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

DR 적용 대상 게시된 동작 올바른 동작
LWG 4044 C++23 터미널이 유니코드를 표시할 수 있는 경우
항상 네이티브 유니코드 API가 사용됨
터미널이 유니코드를 표시하기 위해 네이티브 유니코드 API만
사용할 수 있는 경우에만 사용됨
P3107R5 C++23 출력 작업이 항상 버퍼링됨 버퍼링되지 않은 출력 작업 제공
P3235R3 C++23 P3107R5 에 의해 추가된
함수 이름이 오해의 소지가 있음
함수 이름 변경

참고 항목

stdout 또는 파일 스트림에 type-erased 인수 표현을 사용하여 출력
(함수)
type-erased 인수 표현을 사용하여 유니코드 인식 출력 수행
(함수)
(C++23)
stdout 또는 파일 스트림에 인수의 formatted 표현을 사용하여 출력
(함수 템플릿)
(C++20)
인수의 형식화된 표현을 새 문자열에 저장
(함수 템플릿)

외부 링크

1. 유니코드
2. 유니코드 표준 버전 14.0 - 핵심 사양