Namespaces
Variants

std:: vprintf, std:: vfprintf, std:: vsprintf, std:: vsnprintf

From cppreference.net
< cpp β€Ž | io β€Ž | c
헀더 νŒŒμΌμ— μ •μ˜λ¨ <cstdio>
int vprintf ( const char * format, std :: va_list vlist ) ;
(1)
int vfprintf ( std:: FILE * stream, const char * format, std :: va_list vlist ) ;
(2)
int vsprintf ( char * buffer, const char * format, std :: va_list vlist ) ;
(3)
int vsnprintf ( char * buffer, std:: size_t buf_size, const char * format, std :: va_list vlist ) ;
(4) (C++11 이후)

vlist 둜 μ •μ˜λœ μœ„μΉ˜λ“€μ—μ„œ 데이터λ₯Ό λ‘œλ“œν•˜κ³ , 이λ₯Ό λ¬Έμžμ—΄ ν˜•μ‹μœΌλ‘œ λ³€ν™˜ν•œ ν›„ λ‹€μ–‘ν•œ 싱크에 κ²°κ³Όλ₯Ό κΈ°λ‘ν•©λ‹ˆλ‹€.

1) κ²°κ³Όλ₯Ό stdout 에 κΈ°λ‘ν•©λ‹ˆλ‹€.
2) κ²°κ³Όλ₯Ό 파일 슀트림 stream 에 κΈ°λ‘ν•©λ‹ˆλ‹€.
3) κ²°κ³Όλ₯Ό 문자 λ¬Έμžμ—΄ buffer 에 κΈ°λ‘ν•©λ‹ˆλ‹€.
4) κ²°κ³Όλ₯Ό 문자 λ¬Έμžμ—΄ buffer 에 κΈ°λ‘ν•©λ‹ˆλ‹€. μ΅œλŒ€ buf_size - 1 개의 λ¬Έμžκ°€ κΈ°λ‘λ©λ‹ˆλ‹€. κ²°κ³Ό λ¬Έμžμ—΄μ€ buf_size κ°€ 0이 μ•„λ‹Œ 경우 null 문자둜 μ’…λ£Œλ©λ‹ˆλ‹€. λ§Œμ•½ buf_size κ°€ 0이면 아무것도 κΈ°λ‘λ˜μ§€ μ•ŠμœΌλ©° buffer λŠ” null 포인터일 수 μžˆμ§€λ§Œ, λ°˜ν™˜κ°’(null μ’…κ²°μžλ₯Ό μ œμ™Έν•œ 기둝될 λ°”μ΄νŠΈ 수)은 μ—¬μ „νžˆ κ³„μ‚°λ˜μ–΄ λ°˜ν™˜λ©λ‹ˆλ‹€.

λͺ©μ°¨

λ§€κ°œλ³€μˆ˜

stream - 좜λ ₯ν•  파일 슀트림
buffer - 좜λ ₯ν•  문자 λ¬Έμžμ—΄μ— λŒ€ν•œ 포인터
buf_size - μ΅œλŒ€ 좜λ ₯ 문자 수
format - 데이터 해석 방법을 μ§€μ •ν•˜λŠ” 널 μ’…λ£Œ 문자 λ¬Έμžμ—΄μ— λŒ€ν•œ 포인터
vlist - 좜λ ₯ν•  데이터λ₯Ό ν¬ν•¨ν•˜λŠ” κ°€λ³€ 인수 λͺ©λ‘

format λ¬Έμžμ—΄μ€ 좜λ ₯ μŠ€νŠΈλ¦Όμ— λ³€κ²½ 없이 λ³΅μ‚¬λ˜λŠ” 일반 λ°”μ΄νŠΈ 문자( % μ œμ™Έ)와 λ³€ν™˜ μ§€μ •μžλ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€. 각 λ³€ν™˜ μ§€μ •μžλŠ” λ‹€μŒκ³Ό 같은 ν˜•μ‹μ„ κ°€μ§‘λ‹ˆλ‹€:

  • μ„œλ‘ μ μΈ % λ¬Έμžμž…λ‹ˆλ‹€.
  • (선택 사항) λ³€ν™˜ λ™μž‘μ„ μˆ˜μ •ν•˜λŠ” ν•˜λ‚˜ μ΄μƒμ˜ ν”Œλž˜κ·Έ:
  • - : λ³€ν™˜ κ²°κ³Όκ°€ ν•„λ“œ λ‚΄μ—μ„œ μ™Όμͺ½ μ •λ ¬λ©λ‹ˆλ‹€ (기본값은 였λ₯Έμͺ½ μ •λ ¬).
  • + : λΆ€ν˜Έ μžˆλŠ” λ³€ν™˜(signed conversions)의 경우 κ²°κ³Ό μ•žμ— 항상 λΆ€ν˜Έκ°€ λΆ™μŠ΅λ‹ˆλ‹€ (κΈ°λ³Έμ μœΌλ‘œλŠ” κ²°κ³Όκ°€ 음수일 λ•Œλ§Œ λ§ˆμ΄λ„ˆμŠ€ λΆ€ν˜Έκ°€ λΆ™μŒ).
  • space : λΆ€ν˜Έ μžˆλŠ” λ³€ν™˜ κ²°κ³Όκ°€ λΆ€ν˜Έ 문자둜 μ‹œμž‘ν•˜μ§€ μ•Šκ±°λ‚˜ λΉ„μ–΄ μžˆλŠ” 경우, κ²°κ³Ό μ•žμ— 곡백이 μΆ”κ°€λ©λ‹ˆλ‹€. + ν”Œλž˜κ·Έκ°€ μ‘΄μž¬ν•  경우 λ¬΄μ‹œλ©λ‹ˆλ‹€.
  • # : λ³€ν™˜μ˜ λŒ€μ²΄ ν˜•νƒœ(alternative form) κ°€ μˆ˜ν–‰λ©λ‹ˆλ‹€. μ •ν™•ν•œ νš¨κ³ΌλŠ” μ•„λž˜ ν‘œλ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€. κ·Έλ ‡μ§€ μ•Šμ„ 경우 λ™μž‘μ€ μ •μ˜λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • 0 : μ •μˆ˜ 및 뢀동 μ†Œμˆ˜μ  숫자 λ³€ν™˜μ˜ 경우, space 문자 λŒ€μ‹  μ„ ν–‰ 영(0)이 ν•„λ“œλ₯Ό μ±„μš°λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€. μ •μˆ˜ 숫자의 경우 λͺ…μ‹œμ μœΌλ‘œ 정밀도(precision)κ°€ μ§€μ •λ˜λ©΄ λ¬΄μ‹œλ©λ‹ˆλ‹€. λ‹€λ₯Έ λ³€ν™˜μ—μ„œ 이 ν”Œλž˜κ·Έλ₯Ό μ‚¬μš©ν•˜λ©΄ λ™μž‘μ΄ μ •μ˜λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. - ν”Œλž˜κ·Έκ°€ μ‘΄μž¬ν•  경우 λ¬΄μ‹œλ©λ‹ˆλ‹€.
  • (선택 사항) μ΅œμ†Œ ν•„λ“œ λ„ˆλΉ„λ₯Ό μ§€μ •ν•˜λŠ” μ •μˆ˜ κ°’ λ˜λŠ” * . ν•„μš”ν•œ 경우 κ²°κ³ΌλŠ” 였λ₯Έμͺ½ μ •λ ¬ μ‹œ μ™Όμͺ½μ—, μ™Όμͺ½ μ •λ ¬ μ‹œ 였λ₯Έμͺ½μ— (기본적으둜) 곡백 문자둜 μ±„μ›Œμ§‘λ‹ˆλ‹€. * κ°€ μ‚¬μš©λ˜λŠ” 경우, λ„ˆλΉ„λŠ” int νƒ€μž…μ˜ μΆ”κ°€ 인수둜 μ§€μ •λ˜λ©°, 이 μΈμˆ˜λŠ” λ³€ν™˜ν•  μΈμˆ˜μ™€ 정밀도λ₯Ό μ œκ³΅ν•˜λŠ” 인수(μžˆλŠ” 경우) μ•žμ— λ‚˜νƒ€λ‚©λ‹ˆλ‹€. 인수 값이 음수인 경우 - ν”Œλž˜κ·Έκ°€ μ§€μ •λ˜κ³  μ–‘μ˜ ν•„λ“œ λ„ˆλΉ„κ°€ μ μš©λ©λ‹ˆλ‹€ (μ°Έκ³ : μ΄λŠ” μ΅œμ†Œ λ„ˆλΉ„μ΄λ©° 값은 μ ˆλŒ€ μž˜λ¦¬μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.).
  • (선택적) . 뒀에 μ •μˆ˜ μˆ«μžλ‚˜ * , λ˜λŠ” 아무것도 μ˜€μ§€ μ•Šμ„ 수 있으며, 이것은 λ³€ν™˜μ˜ 정밀도 λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€. * κ°€ μ‚¬μš©λ˜λŠ” 경우, 정밀도 λŠ” int νƒ€μž…μ˜ μΆ”κ°€ 인수둜 μ§€μ •λ˜λ©°, 이 μΈμˆ˜λŠ” λ³€ν™˜λ  인수 μ•žμ— λ‚˜νƒ€λ‚˜μ§€λ§Œ, μ΅œμ†Œ ν•„λ“œ λ„ˆλΉ„λ₯Ό κ³΅κΈ‰ν•˜λŠ” μΈμˆ˜κ°€ 제곡된 경우 κ·Έ 뒀에 μ˜΅λ‹ˆλ‹€. 이 인수의 값이 음수이면 λ¬΄μ‹œλ©λ‹ˆλ‹€. μˆ«μžλ‚˜ * κ°€ μ‚¬μš©λ˜μ§€ μ•ŠμœΌλ©΄ μ •λ°€λ„λŠ” 0으둜 κ°„μ£Όλ©λ‹ˆλ‹€. μ •λ°€λ„μ˜ μ •ν™•ν•œ νš¨κ³Όμ— λŒ€ν•΄μ„œλŠ” μ•„λž˜ ν‘œλ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.
  • (선택 사항) 길이 μˆ˜μ •μž λŠ” 인수의 크기λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€ (λ³€ν™˜ ν˜•μ‹ μ§€μ •μžμ™€ κ²°ν•©ν•˜μ—¬ ν•΄λ‹Ή 인수의 μœ ν˜•μ„ μ§€μ •ν•©λ‹ˆλ‹€).
  • λ³€ν™˜ ν˜•μ‹ μ§€μ •μž.

λ‹€μŒ ν˜•μ‹ μ§€μ •μžλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

λ³€ν™˜
μ§€μ •μž
μ„€λͺ… μ˜ˆμƒ
인수 μœ ν˜•
길이 μˆ˜μ •μžβ†’ hh h μ—†μŒ l ll j z t L
C++11λΆ€ν„°λ§Œ μ‚¬μš© κ°€λŠ₯β†’ Yes Yes Yes Yes Yes
% λ¦¬ν„°λŸ΄ % λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€. 전체 λ³€ν™˜ μ§€μ •μžλŠ” %% 이어야 ν•©λ‹ˆλ‹€. N/A N/A N/A N/A N/A N/A N/A N/A N/A
c

단일 문자 λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.

  • μΈμžλŠ” λ¨Όμ € unsigned char 둜 λ³€ν™˜λ©λ‹ˆλ‹€.
  • l μˆ˜μ •μžκ°€ μ‚¬μš©λ˜λ©΄, μΈμžλŠ” wchar_t [ 2 ] 인자λ₯Ό μ‚¬μš©ν•˜λŠ” %ls 와 같은 λ°©μ‹μœΌλ‘œ λ¨Όμ € λ¬Έμžμ—΄λ‘œ λ³€ν™˜λ©λ‹ˆλ‹€.
N/A N/A
int
std::wint_t
N/A N/A N/A N/A N/A
s

λ¬Έμžμ—΄ 을 κΈ°λ‘ν•©λ‹ˆλ‹€.

  • μΈμžλŠ” 문자 λ°°μ—΄μ˜ 첫 번째 μš”μ†Œλ₯Ό κ°€λ¦¬ν‚€λŠ” 포인터여야 ν•©λ‹ˆλ‹€.
  • Precision 은 기둝할 μ΅œλŒ€ λ°”μ΄νŠΈ 수λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€. Precision 이 μ§€μ •λ˜μ§€ μ•Šμ€ 경우, 첫 번째 널 μ’…κ²°μžκΉŒμ§€μ˜ λͺ¨λ“  λ°”μ΄νŠΈλ₯Ό κΈ°λ‘ν•©λ‹ˆλ‹€.
  • l μ§€μ •μžκ°€ μ‚¬μš©λœ 경우, μΈμžλŠ” wchar_t λ°°μ—΄μ˜ 첫 번째 μš”μ†Œλ₯Ό κ°€λ¦¬ν‚€λŠ” 포인터여야 ν•˜λ©°, μ΄λŠ” std::wcrtomb ν˜ΈμΆœμ„ 톡해 char λ°°μ—΄λ‘œ λ³€ν™˜λœ κ²ƒμ²˜λŸΌ μ²˜λ¦¬λ©λ‹ˆλ‹€(λ³€ν™˜ μƒνƒœλŠ” 0으둜 μ΄ˆκΈ°ν™”λ¨).
N/A N/A
char *
wchar_t *
N/A N/A N/A N/A N/A
d
i

λΆ€ν˜Έ μžˆλŠ” μ •μˆ˜ λ₯Ό 10μ§„μˆ˜ ν‘œν˜„ [-]dddd 둜 λ³€ν™˜ν•©λ‹ˆλ‹€.

  • 정밀도 λŠ” ν‘œμ‹œλ  μ΅œμ†Œ 자릿수λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€. κΈ°λ³Έ μ •λ°€λ„λŠ” 1 μž…λ‹ˆλ‹€.
  • λ³€ν™˜λœ κ°’κ³Ό 정밀도가 λͺ¨λ‘ ​ 0 ​ 인 경우, λ³€ν™˜ 결과둜 아무 λ¬Έμžλ„ μƒμ„±λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • z μˆ˜μ‹μžμ˜ 경우, μ˜ˆμƒ 인수 νƒ€μž…μ€ std::size_t 의 λΆ€ν˜Έ μžˆλŠ” λ²„μ „μž…λ‹ˆλ‹€.
signed char
short
int
long
long long
β€»
N/A
o

λΆ€ν˜Έ μ—†λŠ” μ •μˆ˜ λ₯Ό 8μ§„μˆ˜ ν‘œν˜„ oooo 둜 λ³€ν™˜ν•©λ‹ˆλ‹€.

  • 정밀도 λŠ” ν‘œμ‹œν•  μ΅œμ†Œ 자릿수λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€. κΈ°λ³Έ μ •λ°€λ„λŠ” 1 μž…λ‹ˆλ‹€.
  • λ³€ν™˜λœ κ°’κ³Ό 정밀도가 λͺ¨λ‘ ​ 0 ​ 인 경우 λ³€ν™˜ 결과둜 아무 λ¬Έμžλ„ μƒμ„±λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • λŒ€μ²΄ κ΅¬ν˜„ μ—μ„œλŠ” μ„ ν–‰ 0 ν•˜λ‚˜λ₯Ό μ“°κΈ° μœ„ν•΄ ν•„μš”ν•œ 경우 정밀도가 μ¦κ°€λ©λ‹ˆλ‹€. 이 경우 λ³€ν™˜λœ κ°’κ³Ό 정밀도가 λͺ¨λ‘ ​ 0 ​ 이면 단일 ​ 0 ​ 이 κΈ°λ‘λ©λ‹ˆλ‹€.
unsigned char
unsigned short
unsigned int
unsigned long
unsigned long long
std::ptrdiff_t 의 λΆ€ν˜Έ μ—†λŠ” 버전
ν•΄λ‹Ή μ—†μŒ
x
X

λΆ€ν˜Έ μ—†λŠ” μ •μˆ˜ λ₯Ό 16μ§„μˆ˜ ν‘œν˜„ hhhh 둜 λ³€ν™˜ν•©λ‹ˆλ‹€.

  • x λ³€ν™˜μ˜ 경우 abcdef λ¬Έμžκ°€ μ‚¬μš©λ©λ‹ˆλ‹€.
  • X λ³€ν™˜μ˜ 경우 ABCDEF λ¬Έμžκ°€ μ‚¬μš©λ©λ‹ˆλ‹€.
  • 정밀도 λŠ” ν‘œμ‹œλ  μ΅œμ†Œ 자릿수λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€. κΈ°λ³Έ μ •λ°€λ„λŠ” 1 μž…λ‹ˆλ‹€.
  • λ³€ν™˜λœ κ°’κ³Ό 정밀도가 λͺ¨λ‘ ​ 0 ​ 인 경우 λ³€ν™˜ 결과둜 아무 λ¬Έμžλ„ μƒμ„±λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • λŒ€μ²΄ κ΅¬ν˜„ μ—μ„œ λ³€ν™˜λœ 값이 0이 μ•„λ‹Œ 경우 κ²°κ³Ό μ•žμ— 0x λ˜λŠ” 0X 접두사가 μΆ”κ°€λ©λ‹ˆλ‹€.
N/A
u

λΆ€ν˜Έ μ—†λŠ” μ •μˆ˜ λ₯Ό 10μ§„μˆ˜ ν‘œν˜„ dddd 둜 λ³€ν™˜ν•©λ‹ˆλ‹€.

  • 정밀도 λŠ” ν‘œμ‹œλ  μ΅œμ†Œ 자릿수λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.
  • κΈ°λ³Έ μ •λ°€λ„λŠ” 1 μž…λ‹ˆλ‹€.
  • λ³€ν™˜λœ κ°’κ³Ό 정밀도가 λͺ¨λ‘ ​ 0 ​ 인 경우, λ³€ν™˜ 결과둜 λ¬Έμžκ°€ μƒμ„±λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
N/A
f
F (C++11)

λΆ€λ™μ†Œμˆ˜μ  숫자 λ₯Ό [-]ddd.ddd μŠ€νƒ€μΌμ˜ 10μ§„μˆ˜ ν‘œκΈ°λ²•μœΌλ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.

  • 정밀도 λŠ” μ†Œμˆ˜μ  문자 뒀에 λ‚˜νƒ€λ‚  μ •ν™•ν•œ 자릿수λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.
  • κΈ°λ³Έ μ •λ°€λ„λŠ” 6 μž…λ‹ˆλ‹€.
  • λŒ€μ²΄ κ΅¬ν˜„ μ—μ„œλŠ” μˆ«μžκ°€ λ’€λ”°λ₯΄μ§€ μ•Šλ”λΌλ„ μ†Œμˆ˜μ  λ¬Έμžκ°€ μž‘μ„±λ©λ‹ˆλ‹€.
  • λ¬΄ν•œλŒ€ 및 NaN λ³€ν™˜ μŠ€νƒ€μΌμ— λŒ€ν•΄μ„œλŠ” μ°Έκ³  사항 을 μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.
N/A N/A
double
double (C++11)
N/A N/A N/A N/A
long double
e
E

뢀동 μ†Œμˆ˜μ  숫자 λ₯Ό 10μ§„ μ§€μˆ˜ ν‘œκΈ°λ²•μœΌλ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.

  • e λ³€ν™˜ μŠ€νƒ€μΌμ˜ 경우 [-]d.ddd ο»Ώ e Β±dd ν˜•μ‹μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.
  • E λ³€ν™˜ μŠ€νƒ€μΌμ˜ 경우 [-]d.ddd ο»Ώ E Β±dd ν˜•μ‹μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.
  • μ§€μˆ˜λŠ” μ΅œμ†Œ 두 자리 숫자λ₯Ό ν¬ν•¨ν•˜λ©°, ν•„μš”ν•œ κ²½μš°μ—λ§Œ 더 λ§Žμ€ μžλ¦Ώμˆ˜κ°€ μ‚¬μš©λ©λ‹ˆλ‹€.
  • 값이 ​ 0 ​ 인 경우, μ§€μˆ˜λ„ ​ 0 ​ μž…λ‹ˆλ‹€.
  • 정밀도 λŠ” μ†Œμˆ˜μ  문자 뒀에 λ‚˜νƒ€λ‚  μ •ν™•ν•œ 자릿수λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.
  • κΈ°λ³Έ μ •λ°€λ„λŠ” 6 μž…λ‹ˆλ‹€.
  • λŒ€μ²΄ κ΅¬ν˜„ μ—μ„œλŠ” μ†Œμˆ˜μ  뒀에 μˆ«μžκ°€ 없더라도 μ†Œμˆ˜μ  λ¬Έμžκ°€ κΈ°λ‘λ©λ‹ˆλ‹€.
  • λ¬΄ν•œλŒ€ 및 NaN(Not-a-Number) λ³€ν™˜ μŠ€νƒ€μΌμ— λŒ€ν•΄μ„œλŠ” μ°Έκ³  사항 을 μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.
N/A N/A N/A N/A N/A N/A
a
A

(C++11)

λΆ€λ™μ†Œμˆ˜μ  숫자 λ₯Ό 16μ§„μˆ˜ μ§€μˆ˜ ν‘œκΈ°λ²•μœΌλ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.

  • a λ³€ν™˜ μŠ€νƒ€μΌμ˜ 경우 [-] ο»Ώ 0x h.hhh ο»Ώ p Β±d ν˜•μ‹μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.
  • A λ³€ν™˜ μŠ€νƒ€μΌμ˜ 경우 [-] ο»Ώ 0X h.hhh ο»Ώ P Β±d ν˜•μ‹μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.
  • μΈμˆ˜κ°€ μ •κ·œν™”λœ λΆ€λ™μ†Œμˆ˜μ  값인 경우 첫 번째 16μ§„μˆ˜ μˆ«μžλŠ” 0 이 μ•„λ‹™λ‹ˆλ‹€.
  • 값이 ​ 0 ​ 인 경우, μ§€μˆ˜λ„ ​ 0 ​ μž…λ‹ˆλ‹€.
  • 정밀도 λŠ” 16μ§„μˆ˜ μ†Œμˆ˜μ  문자 뒀에 λ‚˜νƒ€λ‚  μ •ν™•ν•œ 자릿수λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.
  • κΈ°λ³Έ μ •λ°€λ„λŠ” 값을 μ •ν™•ν•˜κ²Œ ν‘œν˜„ν•˜κΈ°μ— μΆ©λΆ„ν•©λ‹ˆλ‹€.
  • λŒ€μ²΄ κ΅¬ν˜„ μ—μ„œλŠ” μ†Œμˆ˜μ  뒀에 μˆ«μžκ°€ 없더라도 μ†Œμˆ˜μ  λ¬Έμžκ°€ κΈ°λ‘λ©λ‹ˆλ‹€.
  • λ¬΄ν•œλŒ€ 및 NaN(μˆ«μžκ°€ μ•„λ‹˜) λ³€ν™˜ μŠ€νƒ€μΌμ— λŒ€ν•΄μ„œλŠ” μ°Έκ³  λ₯Ό ν™•μΈν•˜μ‹­μ‹œμ˜€.
N/A N/A N/A N/A N/A N/A
g
G

λΆ€λ™μ†Œμˆ˜μ  숫자 λ₯Ό κ°’κ³Ό 정밀도 에 따라 십진법 λ˜λŠ” μ‹­μ§„ μ§€μˆ˜ ν‘œκΈ°λ²•μœΌλ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.

  • g λ³€ν™˜ μŠ€νƒ€μΌμ˜ 경우 e λ˜λŠ” f μŠ€νƒ€μΌλ‘œ λ³€ν™˜μ΄ μˆ˜ν–‰λ©λ‹ˆλ‹€.
  • G λ³€ν™˜ μŠ€νƒ€μΌμ˜ 경우 E λ˜λŠ” f (C++11 이전) F (C++11 이후) μŠ€νƒ€μΌλ‘œ λ³€ν™˜μ΄ μˆ˜ν–‰λ©λ‹ˆλ‹€.
  • P λ₯Ό 정밀도가 0이 아닐 경우 정밀도 κ°’, μ§€μ •λ˜μ§€ μ•Šμ•˜μ„ 경우 6 , 정밀도가 ​ 0 ​ 일 경우 1 으둜 μ„€μ •ν•©λ‹ˆλ‹€. μ΄λ•Œ E μŠ€νƒ€μΌ λ³€ν™˜μ˜ μ§€μˆ˜κ°€ X 일 경우:
    • P > X β‰₯ βˆ’4 인 경우, λ³€ν™˜μ€ f λ˜λŠ” F (C++11 이후) μŠ€νƒ€μΌλ‘œ μˆ˜ν–‰λ˜λ©° μ •λ°€λ„λŠ” P βˆ’ 1 βˆ’ X μž…λ‹ˆλ‹€.
    • κ·Έλ ‡μ§€ μ•Šμ„ 경우, λ³€ν™˜μ€ e λ˜λŠ” E μŠ€νƒ€μΌλ‘œ μˆ˜ν–‰λ˜λ©° μ •λ°€λ„λŠ” P βˆ’ 1 μž…λ‹ˆλ‹€.
  • λŒ€μ²΄ ν‘œν˜„ 이 μš”μ²­λ˜μ§€ μ•ŠλŠ” ν•œ ν›„ν–‰ μ˜μ€ 제거되며, μ†Œμˆ˜ 뢀뢄이 남아 μžˆμ§€ μ•Šμ„ 경우 μ†Œμˆ˜μ  λ¬Έμžλ„ μ œκ±°λ©λ‹ˆλ‹€.
  • λ¬΄ν•œλŒ€ 및 NaN(μˆ«μžκ°€ μ•„λ‹˜) λ³€ν™˜ μŠ€νƒ€μΌμ— λŒ€ν•΄μ„œλŠ” μ°Έκ³  λ₯Ό ν™•μΈν•˜μ‹­μ‹œμ˜€.
ν•΄λ‹Ή μ—†μŒ ν•΄λ‹Ή μ—†μŒ ν•΄λ‹Ή μ—†μŒ ν•΄λ‹Ή μ—†μŒ ν•΄λ‹Ή μ—†μŒ ν•΄λ‹Ή μ—†μŒ
n

이 ν•¨μˆ˜ 호좜둜 ν˜„μž¬κΉŒμ§€ μ“°μ—¬μ§„ 문자 수 λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

  • κ²°κ³ΌλŠ” μΈμžκ°€ κ°€λ¦¬ν‚€λŠ” 값에 μ“°μ—¬μ§‘λ‹ˆλ‹€ .
  • μ§€μ •μžμ—λŠ” μ–΄λ– ν•œ ν”Œλž˜κ·Έ , ν•„λ“œ λ„ˆλΉ„ , 정밀도 도 ν¬ν•¨λ˜μ–΄μ„œλŠ” μ•ˆ λ©λ‹ˆλ‹€.
  • z μˆ˜μ •μžμ˜ 경우, μ˜ˆμƒλ˜λŠ” 인자 νƒ€μž…μ€ S * μž…λ‹ˆλ‹€. μ—¬κΈ°μ„œ S λŠ” std:: size_t 의 λΆ€ν˜Έ μžˆλŠ” λ²„μ „μž…λ‹ˆλ‹€.
signed char *
short *
int *
long *
long long *
β€»
N/A
p

κ΅¬ν˜„ μ •μ˜λœ 문자 μ‹œν€€μŠ€λ₯Ό μž‘μ„±ν•˜μ—¬ pointer λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.

N/A N/A
void *
N/A N/A N/A N/A N/A N/A
μ°Έκ³  사항

뢀동 μ†Œμˆ˜μ  λ³€ν™˜ ν•¨μˆ˜λŠ” λ¬΄ν•œλŒ€λ₯Ό inf λ˜λŠ” infinity 둜 λ³€ν™˜ν•©λ‹ˆλ‹€. μ–΄λŠ 것을 μ‚¬μš©ν• μ§€λŠ” κ΅¬ν˜„μ— 따라 μ •μ˜λ©λ‹ˆλ‹€.

NaN(Not-a-Number)은 nan λ˜λŠ” nan( char_sequence ) 둜 λ³€ν™˜λ©λ‹ˆλ‹€. μ–΄λŠ 것을 μ‚¬μš©ν• μ§€λŠ” κ΅¬ν˜„μ— 따라 μ •μ˜λ©λ‹ˆλ‹€.

λ³€ν™˜ μ§€μ •μž F , E , G , A λŠ” λŒ€μ‹  INF , INFINITY , NAN 을 좜λ ₯ν•©λ‹ˆλ‹€.

char , unsigned char , signed char , short , 그리고 unsigned short λ₯Ό 좜λ ₯ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” λ³€ν™˜ μ§€μ •μžλŠ” κΈ°λ³Έ 인수 승격 의 승격된 νƒ€μž…μ„ κΈ°λŒ€ν•˜μ§€λ§Œ, 값을 좜λ ₯ν•˜κΈ° 전에 char , unsigned char , signed char , short , 그리고 unsigned short 둜 λ³€ν™˜λ©λ‹ˆλ‹€. κ°€λ³€ 인수 ν•¨μˆ˜κ°€ 호좜될 λ•Œ λ°œμƒν•˜λŠ” 승격으둜 인해 μ΄λŸ¬ν•œ νƒ€μž…μ˜ 값을 μ „λ‹¬ν•˜λŠ” 것은 μ•ˆμ „ν•©λ‹ˆλ‹€.

κ³ μ • λ„ˆλΉ„ 문자 νƒ€μž…( std::int8_t λ“±)에 λŒ€ν•œ μ˜¬λ°”λ₯Έ λ³€ν™˜ μ§€μ •μžλŠ” 헀더 <cinttypes> 에 μ •μ˜λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€(비둝 PRIdMAX , PRIuMAX 등이 %jd , %ju λ“±κ³Ό λ™μ˜μ–΄μ΄μ§€λ§Œ).

λ©”λͺ¨λ¦¬ μ“°κΈ° λ³€ν™˜ μ§€μ •μž %n 은 ν˜•μ‹ λ¬Έμžμ—΄μ΄ μ‚¬μš©μž μž…λ ₯에 μ˜μ‘΄ν•˜λŠ” λ³΄μ•ˆ 곡격의 일반적인 λŒ€μƒμž…λ‹ˆλ‹€.

각 λ³€ν™˜ μ§€μ •μžμ˜ λ™μž‘ μ΄ν›„μ—λŠ” μ‹œν€€μŠ€ 포인트 κ°€ μžˆμŠ΅λ‹ˆλ‹€; μ΄λŠ” μ—¬λŸ¬ %n κ²°κ³Όλ₯Ό λ™μΌν•œ λ³€μˆ˜μ— μ €μž₯ν•˜κ±°λ‚˜, 극단적인 경우둜 λ™μΌν•œ 호좜 λ‚΄μ—μ„œ 이전 %n 에 μ˜ν•΄ μˆ˜μ •λœ λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜λŠ” 것을 ν—ˆμš©ν•©λ‹ˆλ‹€.

λ³€ν™˜ μ§€μ •μžκ°€ μœ νš¨ν•˜μ§€ μ•ŠμœΌλ©΄ λ™μž‘μ€ μ •μ˜λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λ°˜ν™˜κ°’

1-3) 성곡 μ‹œ μž‘μ„±λœ 문자 수 λ˜λŠ” 였λ₯˜ λ°œμƒ μ‹œ 음수 κ°’.
4) 성곡 μ‹œ 기둝된 문자 수 λ˜λŠ” 였λ₯˜ λ°œμƒ μ‹œ 음수 κ°’. κ²°κ³Ό λ¬Έμžμ—΄μ΄ buf_size μ œν•œμœΌλ‘œ 인해 μž˜λ¦¬λŠ” 경우, 이 ν•¨μˆ˜λŠ” μ œν•œμ΄ μ μš©λ˜μ§€ μ•Šμ•˜μ„ λ•Œ κΈ°λ‘λ˜μ—ˆμ„ 총 문자 수(μ’…λ£Œ 널 λ°”μ΄νŠΈλŠ” μ œμ™Έ)λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

μ°Έκ³  사항

이 λͺ¨λ“  ν•¨μˆ˜λ“€μ€ μ΅œμ†Œν•œ ν•œ 번 이상 va_arg λ₯Ό ν˜ΈμΆœν•˜λ©°, λ°˜ν™˜ ν›„ arg 의 값은 μ •μ˜λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ ν•¨μˆ˜λ“€μ€ va_end λ₯Ό ν˜ΈμΆœν•˜μ§€ μ•ŠμœΌλ©°, μ΄λŠ” ν˜ΈμΆœμžκ°€ μˆ˜ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€.

예제

#include <cstdarg>
#include <cstdio>
#include <ctime>
#include <vector>
void debug_log(const char *fmt, ...)
{
    std::time_t t = std::time(nullptr);
    char time_buf[100];
    std::strftime(time_buf, sizeof time_buf, "%DΒ %T", std::gmtime(&t));
    std::va_list args1;
    va_start(args1, fmt);
    std::va_list args2;
    va_copy(args2, args1);
    std::vector<char> buf(1 + std::vsnprintf(nullptr, 0, fmt, args1));
    va_end(args1);
    std::vsnprintf(buf.data(), buf.size(), fmt, args2);
    va_end(args2);
    std::printf("%s [debug]:Β %s\n", time_buf, buf.data());
}
int main()
{
    debug_log("Logging,Β %d,Β %d,Β %d", 1, 2, 3);
}

좜λ ₯:

04/13/15 15:09:18 [debug]: Logging, 1, 2, 3

μ°Έκ³  ν•­λͺ©

μ„œμ‹μ΄ μ§€μ •λœ 좜λ ₯을 stdout , 파일 슀트림 λ˜λŠ” 버퍼에 좜λ ₯ν•©λ‹ˆλ‹€
(ν•¨μˆ˜)
(C++11) (C++11) (C++11)
κ°€λ³€ 인수 λͺ©λ‘μ„ μ‚¬μš©ν•˜μ—¬ stdin , 파일 슀트림 λ˜λŠ” λ²„νΌμ—μ„œ
μ„œμ‹μ΄ μ§€μ •λœ μž…λ ₯을 μ½μŠ΅λ‹ˆλ‹€
(ν•¨μˆ˜)
type-erased 인수 ν‘œν˜„μ„ μ‚¬μš©ν•˜μ—¬
μœ λ‹ˆμ½”λ“œλ₯Ό μ§€μ›ν•˜λŠ” stdout λ˜λŠ” 파일 μŠ€νŠΈλ¦Όμ— 좜λ ₯ν•©λ‹ˆλ‹€
(ν•¨μˆ˜)
type-erased 인수 ν‘œν˜„μ„ μ‚¬μš©ν•˜μ—¬
stdout λ˜λŠ” 파일 μŠ€νŠΈλ¦Όμ— 좜λ ₯ν•©λ‹ˆλ‹€
(ν•¨μˆ˜)
C λ¬Έμ„œ λ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€: vprintf , vfprintf , vsprintf , vsnprintf