42 Seoul/ft_printf

[42 Seoul] ft_printf

μœ μ§„μ˜ 2021. 6. 26. 15:40
ν”„λ‘œμ νŠΈ λͺ©ν‘œ: μ‹€μ œ printf의 λͺ¨λ°© ν•¨μˆ˜μΈ ft_printfκ°€ ν¬ν•¨λœ 라이브러리 libftprintf.a 생성
ν”„λ‘œμ νŠΈ μš”κ΅¬ 사항: Makefile을 μ‚¬μš©ν•˜λ˜ μ΅œμ†Œν•œ all, clean, fclean, re κ·œμΉ™μ„ 포함해야 ν•œλ‹€.

 

μ„ ν–‰ 지식

 

1. κ°€λ³€ 인수 ν•¨μˆ˜

 

[μŠ€μΉ΄μ›ƒ Cμ–Έμ–΄ κ°•μ’Œ] 31-1 κ°€λ³€ 인수 ν•¨μˆ˜λž€?

[μŠ€μΉ΄μ›ƒ Cμ–Έμ–΄ κ°•μ’Œ] 31-1 κ°€λ³€ 인수 ν•¨μˆ˜λž€? 머리말 μ•ˆλ…•ν•˜μ„Έμš”. Programogλ₯Ό ...

blog.naver.com

 

κ°€λ³€ 인자 ν•¨μˆ˜ λ§Œλ“€κΈ°

#include #include // va_list, va_start, va_arg, va_endκ°€ μ •μ˜λœ 헀더 파일 void printNumbers(int args, ...) // κ°€λ³€ 인자의 개수λ₯Ό λ°›μŒ, ...둜 κ°€λ³€ 인자 μ„€μ • { va_list ap; // κ°€λ³€ 인자 λͺ©λ‘ 포인터 (argum

www.notion.so

printf ν•¨μˆ˜λŠ” 맀개 λ³€μˆ˜μ˜ κ°œμˆ˜κ°€ μ •ν•΄μ§€μ§€ μ•Šμ€ ν•¨μˆ˜μ΄λ‹€. μ΄λ ‡κ²Œ 맀번 ν•¨μˆ˜μ— λ“€μ–΄κ°€λŠ” 인수의 κ°œμˆ˜κ°€ λ³€ν•˜λŠ” 것을 κ°€λ³€ 인자라고 ν•œλ‹€. ν•¨μˆ˜μ—μ„œ κ°€λ³€ 인자λ₯Ό μ •μ˜ν•  λ•ŒλŠ” κ³ μ • 맀개 λ³€μˆ˜κ°€ ν•œ 개 이상 μžˆμ–΄μ•Ό ν•˜λ©° κ³ μ • 맀개 λ³€μˆ˜ 뒀에 ...을 λΆ™μ—¬ 맀개 λ³€μˆ˜μ˜ κ°œμˆ˜κ°€ μ •ν•΄μ§€μ§€ μ•Šμ•˜λŠ” ν‘œμ‹œλ₯Ό ν•΄μ€€λ‹€. 단, ... λ’€μ—λŠ” λ‹€λ₯Έ 맀개 λ³€μˆ˜λ₯Ό μ§€μ •ν•  수 μ—†λ‹€. 

λ°˜ν™˜κ°’μžλ£Œν˜• ν•¨μˆ˜ 이름(μžλ£Œν˜• κ³ μ •λ§€κ°œλ³€μˆ˜, ...)
{
}

κ³ μ • 맀개 λ³€μˆ˜κ°€ μ•„λ‹Œ ...둜 받은 κ°€λ³€ μΈμžλ“€μ„ μ²˜λ¦¬ν•˜λ €λ©΄ stdarg.h에 μ •μ˜λœ κ°€λ³€ 인자 처리 맀크둜λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

stdarg.h에 μ •μ˜λœ κ°€λ³€ 인자 처리 λ§€ν¬λ‘œλŠ” λ‹€μŒκ³Ό κ°™λ‹€.

 

va_list

μžλ£Œν˜•μ΄λ‹€. κ°€λ³€ 인자 λͺ©λ‘μ„ μ˜λ―Έν•˜κ³  κ°€λ³€ 인자의 λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό μ €μž₯ν•˜λŠ” 포인터이닀.

ν•¨μˆ˜λ‘œ μ „λ‹¬λ˜λŠ” μΈμˆ˜λ“€μ€ μŠ€νƒ μ˜μ—­μ— μ €μž₯되며 ν•¨μˆ˜λŠ” μŠ€νƒ μ˜μ—­μ—μ„œ 인수λ₯Ό κΊΌλ‚΄ μ“΄λ‹€. μŠ€νƒμ— μžˆλŠ” 인수λ₯Ό 읽을 λ•Œ 포인터 연산을 ν•΄μ•Ό ν•˜λŠ”λ° ν˜„μž¬ 읽고 μžˆλŠ” λ²ˆμ§€λ₯Ό κΈ°μ–΅ν•˜κΈ° μœ„ν•΄ va_listν˜•μ˜ 포인터 λ³€μˆ˜ ν•˜λ‚˜κ°€ ν•„μš”ν•˜λ‹€. λ³€μˆ˜ 이름은 ap둜 λ˜μ–΄μžˆλŠ”λ° apλŠ” μ–΄λ””κΉŒμ§€λ‚˜ μ§€μ—­ λ³€μˆ˜μΌλΏμ΄λ―€λ‘œ 이름은 λ§ˆμŒλŒ€λ‘œ μ •ν•  수 있되 κ΄€μŠ΅μ μœΌλ‘œ κ°€λ³€ 인수λ₯Ό λ‹€λ£¨λŠ” λ§€ν¬λ‘œμ—μ„œλŠ” apλΌλŠ” 이름을 μ‚¬μš©ν•œλ‹€. va_list νƒ€μž…μ€ char * ν˜•μœΌλ‘œ μ •μ˜λ˜μ–΄ μžˆλ‹€. κ°€λ³€ 인수λ₯Ό 읽기 μœ„ν•œ 포인터 λ³€μˆ˜λ₯Ό μ„ μ–Έν–ˆλ‹€κ³  μƒκ°ν•˜λ©΄ λœλ‹€.


va_start

void  va_start(va_list ap, last)

ap: va_list둜 λ§Œλ“  포인터가 λ‹΄κΈ΄λ‹€.

last:  κ°€λ³€ 인자 λͺ©λ‘μ˜ 첫 번째 인자 λ°”λ‘œ μ•žμ— μ˜€λŠ” ν•„μˆ˜ 맀개 λ³€μˆ˜μ˜ 이름, 즉 λ§ˆμ§€λ§‰ κ³ μ •λœ ν•„μˆ˜ μΈμžκ°€ λ‹΄κΈ΄λ‹€.

 

va_list둜 μ„ μ–Έν•œ 포인터 apλ₯Ό μ΄ˆκΈ°ν™”ν•˜κΈ° μœ„ν•œ 맀크둜 ν•¨μˆ˜μ΄λ‹€. 두 번째 인수둜 λ§ˆμ§€λ§‰ κ³ μ • 인수λ₯Ό 인수둜 μ·¨ν•˜λŠ” μ΄μœ λŠ”, λ§ˆμ§€λ§‰ κ³ μ • 인수 λ‹€μŒμ˜ μ£Όμ†Œκ°€ 첫 번째 κ°€λ³€ μΈμˆ˜κ°€ 자리 작고 μžˆμœΌλ―€λ‘œ λ§ˆμ§€λ§‰ κ³ μ • 인수의 μ£Όμ†Œ 값을 μ•Œλ©΄ 첫 번째 κ°€λ³€μΈμˆ˜μ˜ μ£Όμ†Œκ°’λ„ μ•Œ 수 μžˆλ‹€. 첫 번째 κ°€λ³€ 인수의 μ£Όμ†Œκ°’μ„ 포인터 apμ—κ²Œ λŒ€μž…ν•œλ‹€.

 

va_arg

type  va_arg(va_list ap, type)

ap: va_list둜 λ§Œλ“  포인터가 λ‹΄κΈ΄λ‹€.

type: intλ‚˜ long, doubleκ³Ό 같은 νƒ€μž… 이름이 λ‹΄κΈ΄λ‹€.

 

ap둜 μ§€μ •λœ μœ„μΉ˜μ—μ„œ μ§€μ •λœ type 값을 κ²€μƒ‰ν•˜κ³  λ¦¬μŠ€νŠΈμ—μ„œ λ‹€μŒ 인수λ₯Ό 가리킀도둝 apλ₯Ό μ¦κ°€μ‹œμΌœ λ‹€μŒ μΈμˆ˜κ°€ μ‹œμž‘λ˜λŠ” μœ„μΉ˜λ₯Ό κ²°μ •ν•œλ‹€. 즉, νŠΉμ • κ°€λ³€ 인자λ₯Ό 가리킀고 μžˆλŠ” va_list의 포인터λ₯Ό λ‹€μŒ κ°€λ³€ 인자둜 μ΄λ™μ‹œμΌœ μ£ΌλŠ” 맀크둜 ν•¨μˆ˜μ΄λ‹€.

type을 μ„€μ •ν•  λ•Œ, char, short의 κ²½μš°μ—λŠ” int둜 λŒ€μ‹  μ“°κ³ , float의 κ²½μš°μ—λŠ” double둜 λŒ€μ‹  μ“΄ 이후 ν˜• λ³€ν™˜μ„ ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€.

ex) char ch = (char) va_arg(ap, int);

 

va_end

void  va_end(va_list ap)

λͺ¨λ“  μΈμˆ˜κ°€ κ²€μƒ‰λœ ν›„ va_endλŠ” 포인터λ₯Ό NULL둜 λ‹€μ‹œ μ„€μ •ν•œλ‹€. 즉, 포인터 ap의 λ‚΄μš©μ„ κΉ”λ”ν•˜κ²Œ μ •λ¦¬ν•΄μ£ΌλŠ” 맀크둜 ν•¨μˆ˜μΈ 것이닀.

 

 

2. printf ν˜•μ‹ λ¬Έμžμ—΄(format)

 

"ν˜•μ‹νƒœκ·Έμ™€ μ„œμ‹μ§€μ •μž" printf ν•¨μˆ˜μ˜ μ˜΅μ…˜ μ•Œμ•„λ³΄κΈ°

ν˜•μ‹λ¬Έμžμ—΄? 포맷? ν˜•μ‹νƒœκ·Έ? μ„œμ‹μ§€μ •μž? ν—·κ°ˆλ¦¬λŠ” printf ν•¨μˆ˜μ˜ μ˜΅μ…˜λ“€μ„ μ •λ¦¬ν•΄λ³΄μ•˜λ‹€.

velog.io

printf의 ν”„λ‘œν† νƒ€μž…μ€ λ‹€μŒκ³Ό κ°™λ‹€.

int  printf(const char * format, ...)

printf의 κ³ μ • 인수 format은 ν”νžˆ μš°λ¦¬κ°€ 좜λ ₯ν•˜κ³ μž ν•˜λŠ” λ¬Έμžμ—΄μ΄κ³ , 이 λ¬Έμžμ—΄ μ•ˆμ—λŠ” % 문자둜 μ‹œμž‘ν•˜λŠ” μ„œμ‹μ§€μ •μžκ°€ μ‘΄μž¬ν•œλ‹€. 이 μ„œμ‹μ§€μ •μžμ— λ‹€μ–‘ν•œ ν”Œλž˜κ·Έ, 폭, 정밀도, κΈΈμ΄λ“€μ˜ μ˜΅μ…˜μ„ μ‘°ν•©ν•΄μ„œ μ‚¬μš©ν•  수 μžˆλ‹€. μ„œμ‹μ§€μ •μžμ— μ˜΅μ…˜μ„ μΆ”κ°€ν•˜λ €λ©΄ μ •ν•΄μ§„ ν˜•μ‹ νƒœκ·Έμ˜ ν˜•νƒœλ₯Ό μ§€μΌœμ•Ό ν•œλ‹€. printf의 ν˜•μ‹ νƒœκ·ΈλŠ” μ•„λž˜μ™€ κ°™λ‹€.

%[flag][width][.precision][길이]μ„œμ‹μ§€μ •μž

ν˜•μ‹ νƒœκ·ΈλŠ” 좜λ ₯ν•  κ°’, 즉 κ°€λ³€ μΈμžμ— λŒ€ν•΄ 각각 적용되기 λ•Œλ¬Έμ— κ°€λ³€ 인자의 κ°œμˆ˜κ°€ ν˜•μ‹ νƒœκ·Έμ˜ κ°œμˆ˜μ™€ κ°™κ±°λ‚˜ μ»€μ•Όλ§Œ ν•œλ‹€. μ΅œμ†Œν•œμ˜ ν˜•μ‹ νƒœκ·ΈλŠ” % 와 μ„œμ‹μ§€μ •μžλ‘œ κ΅¬μ„±λœλ‹€. []둜 λ‘˜λŸ¬μ‹ΈμΈ 뢀뢄은 μ˜΅μ…˜μ΄λ―€λ‘œ μƒλž΅ν•  수 μžˆλ‹€.

 

ft_printf ν”„λ‘œμ νŠΈλŠ” μ˜΅μ…˜ 쀑에 -, 0, .숫자, *, 숫자λ₯Ό κ΅¬ν˜„ν•΄μ•Ό ν•˜λ―€λ‘œ 이 μ˜΅μ…˜λ“€λ§Œ μ •λ¦¬ν•˜λ € ν•œλ‹€. 

μ˜΅μ…˜ μ„€λͺ…
- ν•„λ“œμ—μ„œ 값을 μ™Όμͺ½μœΌλ‘œ μ •λ ¬ν•œλ‹€. 기본적으둜 였λ₯Έμͺ½μœΌλ‘œ μ •λ ¬ν•œλ‹€.
0 였λ₯Έμͺ½ 정렬일 λ•Œλ§Œ 곡백을 0으둜 μ±„μš΄λ‹€. 
.숫자 μ‹€μˆ˜μΌ λ•Œ μ†Œμˆ˜μ  μ΄ν•˜μ˜ 자릿 수λ₯Ό κ²°μ •ν•œλ‹€. 일뢀 specifierμ—μ„œλ§Œ μ‚¬μš© κ°€λŠ₯ν•˜κ³  κ·Έ μ™Έμ˜ κ°’μ—μ„œλŠ” λ¬΄μ‹œν•œλ‹€. (μ‹€μˆ˜ν˜•, λ¬Έμžμ—΄, μ •μˆ˜ν˜•μ—μ„œ μ‚¬μš© κ°€λŠ₯)
숫자 μ§€μ •ν•œ 숫자만큼 폭 크기λ₯Ό μ„€μ •ν•œλ‹€. 
* ν­μ΄λ‚˜ 정밀도λ₯Ό ν˜•μ‹ λ¬Έμžμ—΄μ— μ§€μ •ν•΄μ„œ λ°›μ§€ μ•Šμ§€λ§Œ, κ·Έ λŒ€μ‹ μ— ν˜•μ‹ λ¬Έμžμ—΄ 뒀에 μ˜€λŠ” μΈμžλ“€μ— λ„£μ–΄μ„œ λ°›λŠ”λ‹€. 이 λ•Œ, μ΄λŠ” μ •μˆ˜ 값이여야 ν•˜λ©° ν­μ΄λ‚˜ 정밀도λ₯Ό μ§€μ •ν•˜λŠ” λ³€μˆ˜ 뒀에 좜λ ₯ν•  데이터가 μœ„μΉ˜ν•˜λ©΄ λœλ‹€. μ˜ˆμ‹œ μ°Έκ³ 
μ˜΅μ…˜ μ‚¬μš© μ˜ˆμ‹œ

#include
<stdio.h>

int main()
{
      int num = 1;
      printf("[%*dHi]\n", -3, num);
      printf("[%6.*dHi]\n", 3, num);
      printf("[%03d]", num);
}


>>>  [1  Hi]
         [ 001Hi]
         [001]

 

이번 ν”„λ‘œμ νŠΈμ—μ„œ κ΅¬ν˜„ν•΄μ•Ό ν•  μ„œμ‹μ§€μ •μžλŠ” λ‹€μŒκ³Ό κ°™λ‹€.

type 좜λ ₯ ν˜•νƒœ μ˜ˆμ‹œ
c 문자 a
d or i λΆ€ν˜Έ μžˆλŠ” 10μ§„λ²•μœΌλ‘œ λ‚˜νƒ€λ‚œ μ •μˆ˜ 392
s λ¬Έμžμ—΄ sample
p 포인터 μ£Όμ†Œ 0x7ffeeb7c6afc
u λΆ€ν˜Έμ—†λŠ” 10μ§„λ²•μœΌλ‘œ λ‚˜νƒ€λ‚Έ μ •μˆ˜ (unsigned int) 7235
x λΆ€ν˜Έμ—†λŠ” 16 μ§„λ²•μœΌλ‘œ λ‚˜νƒ€λ‚Έ μ •μˆ˜ (μ†Œλ¬Έμž μ‚¬μš©) 7fa
X λΆ€ν˜Έμ—†λŠ” 16 μ§„λ²•μœΌλ‘œ λ‚˜νƒ€λ‚Έ μ •μˆ˜ (λŒ€λ¬Έμž μ‚¬μš©) 7FA

 

printfλŠ” 좜λ ₯에 μ„±κ³΅ν•˜λ©΄ 좜λ ₯된 전체 문자의 개수λ₯Ό λ°˜ν™˜ν•œλ‹€. 좜λ ₯에 μ‹€νŒ¨ν•˜λ©΄ μŒμˆ˜κ°€ λ°˜ν™˜λœλ‹€.

 

β€»  이번 ν”„λ‘œμ νŠΈμ—μ„œλŠ” μ„œμ‹μ§€μ •μž 뿐만 μ•„λ‹ˆλΌ %λ₯Ό 좜λ ₯ν•˜κΈ° μœ„ν•œ %% ν˜•μ‹λ„ κ΅¬ν˜„ν•΄μ•Ό ν•œλ‹€. 이 ν˜•μ‹ λ˜ν•œ ν˜•μ‹ νƒœκ·Έ κ·œμΉ™μ΄ μ‘΄μž¬ν•œλ‹€.

 

Ft_printf  κ΅¬ν˜„

 

1.  ν˜•μ‹ νƒœκ·Έ κ·œμΉ™

 

ν˜•μ‹ νƒœκ·Έ 곡톡 κ·œμΉ™

 

1.  - ν”Œλž˜κ·Έκ°€ μžˆλŠ”λ°  폭이 음수일 경우, 즉  - ν”Œλž˜κ·Έκ°€ μ—¬λŸ¬ 개 μžˆλŠ” 경우

 ex) ft_printf("%--3d", 1);

=>  - ν”Œλž˜κ·Έκ°€ ν•˜λ‚˜ μžˆλŠ” κ²ƒμ²˜λŸΌ ν–‰λ™ν•œλ‹€.

 

2. 정밀도에 μŒμˆ˜κ°€ λ“€μ–΄μ˜¬ 경우

ex) ft_printf("%10.-3d", 1);

=> 정밀도가 λ¬΄μ‹œλ‹Ήν•œλ‹€.

 

3. 0 ν”Œλž˜κ·Έμ™€ - ν”Œλž˜κ·ΈλŠ” 같이 쓰일 수 μ—†κ³ , ν­μ΄λ‚˜ μ •λ°€λ„μ˜ *와 μˆ«μžλŠ” 같이 쓰일 수 μ—†λ‹€.

 

μ„œμ‹μ§€μ •μž c의 ν˜•μ‹ νƒœκ·Έ κ·œμΉ™

 

1. 0 ν”Œλž˜κ·Έμ™€ μ •λ°€λ„λŠ” warning이 λœ¬λ‹€. . 은 warning은 μ•ˆ λœ¨μ§€λ§Œ 정밀도 값이 μ£Όμ–΄μ§€μ§€ μ•ŠμœΌλ‹ˆ 정밀도에 λŒ€ν•œ λ™μž‘μ„ ν•˜μ§€ μ•ŠλŠ”λ‹€.

 

2. - ν”Œλž˜κ·Έμ™€ 폭만 μ •μƒμ μœΌλ‘œ λ™μž‘ν•œλ‹€.

 

 

μ„œμ‹μ§€μ •μž d와 i의 ν˜•μ‹ νƒœκ·Έ κ·œμΉ™

 

1. 0 ν”Œλž˜κ·ΈμΌ λ•ŒλŠ” 우츑 정렬일 λ•Œλ§Œ 남은 폭에 0을 μ±„μš΄λ‹€.

 

2. μ •λ°€λ„λŠ” 0 ν”Œλž˜κ·Έμ™€ λΉ„μŠ·ν•œ λ™μž‘μ„ ν•œλ‹€. 정밀도가 좜λ ₯ν•  κ°’μ˜ μžλ¦Ώμˆ˜λ³΄λ‹€ 크닀면 남은 자릿수λ₯Ό 0으둜 μ±„μš΄λ‹€. 0 ν”Œλž˜κ·Έμ™€ 같이 쓰이면 0 ν”Œλž˜κ·Έκ°€ λ¬΄μ‹œλ‹Ήν•œλ‹€. 

 

3. λ§Œμ•½ 정밀도가 음수라면 정밀도가 λ¬΄μ‹œλ‹Ήν•˜κΈ° λ•Œλ¬Έμ— 0 ν”Œλž˜κ·Έμ™€ 같이 쓰인닀면 0 ν”Œλž˜κ·ΈλŠ” 정상 λ™μž‘ν•œλ‹€.

 

4. 좜λ ₯ν•  값이 0이고 정밀도도 0이라면 아무것도 좜λ ₯λ˜μ§€ μ•Šμ•„μ•Ό ν•œλ‹€. μ΄λ•Œ, 폭이 μ‘΄μž¬ν•˜λ©΄ 곡백 λ¬Έμžκ°€ 폭만큼 좜λ ₯λœλ‹€.

 

5. 음수일 경우 λΆ€ν˜Έ - 도 폭에 ν¬ν•¨λ˜κ³  μ •λ°€λ„μ—μ„œμ˜ 0 좜λ ₯은 λΆ€ν˜Έ - λ’€μ—μ„œ λ™μž‘ν•œλ‹€.

 

 

μ„œμ‹μ§€μ •μž s의 ν˜•μ‹ νƒœκ·Έ κ·œμΉ™

 

1. 0 ν”Œλž˜κ·Έ warning

 

2. 정밀도가 0μ΄κ±°λ‚˜ . 만 μ˜¨λ‹€λ©΄ 아무것도 좜λ ₯ν•˜μ§€ μ•ŠλŠ”λ‹€. μ΄λ•Œ, 폭이 μ‘΄μž¬ν•˜λ©΄ 곡백 λ¬Έμžκ°€ 폭만큼 좜λ ₯λœλ‹€.

 

3. 정밀도가 좜λ ₯ν•  λ¬Έμžμ—΄μ˜ 길이보닀 κΈΈ λ•ŒλŠ” λ¬Έμžμ—΄μ˜ 길이만큼 좜λ ₯되고, 정밀도가 μ§§λ‹€λ©΄ μ •λ°€λ„λ§ŒνΌ 좜λ ₯λœλ‹€.

 

 

μ„œμ‹μ§€μ •μž u,x, X의 ν˜•μ‹ νƒœκ·Έ κ·œμΉ™

 

1. ν˜•μ‹ νƒœκ·Έ κ·œμΉ™μ€ d일 λ•Œμ™€ λΉ„μŠ·ν•˜λ‹€. ν•˜μ§€λ§Œ u, x, XλŠ” λͺ¨λ‘ λΆ€ν˜Έκ°€ μ—†λŠ” unsigned int νƒ€μž…μ˜ 값을 좜λ ₯ν•˜λ―€λ‘œ μŒμˆ˜μ™€ κ΄€λ ¨λœ κ·œμΉ™μ€ 생각해 쀄 ν•„μš”κ°€ μ—†λ‹€. 

 

μ„œμ‹μ§€μ •μž p의 ν˜•μ‹ νƒœκ·Έ κ·œμΉ™

1. 0 ν”Œλž˜κ·Έ warning

 

2. 정밀도에 0을 ν¬ν•¨ν•œ μˆ«μžλ‚˜ * κ°€ μ£Όμ–΄μ§„λ‹€λ©΄ warning이닀. . 만 μ˜€λŠ” 건 정상 λ™μž‘ν•œλ‹€.

 

 

% 의 ν˜•μ‹ νƒœκ·Έ κ·œμΉ™

 

1. 0 ν”Œλž˜κ·Έμ™€ - ν”Œλž˜κ·Έ λͺ¨λ‘ 정상 λ™μž‘ν•œλ‹€. μ΄λ•Œ, 0 ν”Œλž˜κ·Έμ™€ - ν”Œλž˜κ·Έκ°€ μœ μΌν•˜κ²Œ 같이 쓰일 수 μžˆλŠ”λ° 0 ν”Œλž˜κ·Έκ°€ λ¬΄μ‹œλ‹Ήν•œλ‹€.

 

2. 정밀도가 μ‘΄μž¬ν•˜μ—¬λ„ 정밀도가 μ—†λŠ” κ²ƒμ²˜λŸΌ ν–‰λ™ν•œλ‹€.

 

 

2. κ°€λ³€ 인자 νƒ€μž…

 

각 μ„œμ‹μ§€μ •μžλ§ˆλ‹€ κ°€λ³€ 인자λ₯Ό λ°›μ•„μ™€μ„œ μ‚¬μš©ν•˜λ €λ©΄ μ„œμ‹μ§€μ •μžμ— μ•Œλ§žμ€ 데이터 νƒ€μž…μ„ va_arg  맀크둜 ν•¨μˆ˜μ˜ 두 번째 맀개 λ³€μˆ˜μ— μ§€μ •ν•΄μ€˜μ•Ό ν•œλ‹€. 

 

1. μ„œμ‹μ§€μ •μž c, d, i

va_arg(ap, int);

 

2. μ„œμ‹μ§€μ •μž s

va_arg(ap, char *);

 

3. μ„œμ‹μ§€μ •μž u, x, X

va_arg(ap, unsigned int);

 

4. μ„œμ‹μ§€μ •μž p

va_arg(ap, void *);