๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • Dev Blog
42 Seoul/ft_printf

[42 Seoul] ft_printf

by ์œ ์ง„์˜ 2021. 6. 26.
ํ”„๋กœ์ ํŠธ ๋ชฉํ‘œ: ์‹ค์ œ 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 *);

 

๋Œ“๊ธ€