๐Ÿ’ก

ft_printf ๋ณธ๋ฌธ

42

ft_printf

์•„์˜ณ์ด 2021. 5. 30. 19:14

 ์‚ฌ์ „ ์ง€์‹

- ๊ฐ€๋ณ€ ์ธ์ž

- printf ์˜ ์ •์˜๋ฅผ ๋ณด๋ฉด (man 3 printf) int printf(const char * restrict format, ...); ์œผ๋กœ ๋˜์–ด์žˆ๋‹ค

์—ฌ๊ธฐ์„œ '...' ์„ '๊ฐ€๋ณ€์ธ์ž'๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

- ์ธ์ˆ˜์˜ ๊ฐœ์ˆ˜์™€ ํƒ€์ž…์ด ๋ฏธ๋ฆฌ ์ •ํ•ด์ ธ ์žˆ์ง€ ์•Š๋‹ค๋Š” ์˜๋ฏธ๋กœ ๋Œ€๋žต์ ์ธ ๊ตฌ์กฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

#include <stdarg.h>

void foo(int a, ...)
{
	va_list ap;
	va_start(ap, a)
	while ( ๋ชจ๋“  ์ธ์ˆ˜๋ฅผ ์ฝ์„ ๋•Œ ๊นŒ์ง€)
    {
		va_arg(ap, ์ธ์ˆ˜ ํƒ€์ž…);
	}
	va_end(ap);
}

- va_list ap: ๊ฐ€๋ณ€์ธ์ž์˜ ๋ชฉ๋ก. ๊ฐ€๋ณ€์ธ์ž์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ํฌ์ธํ„ฐ์ด๋‹ค

 

- va_start(ap, a) : va_list ๋กœ ๋งŒ๋“ค์–ด์ง„ ์ธ์ˆ˜ ๋ชฉ๋ก์˜ ์ฒซ ๋ฒˆ์งธ ์ธ์ž ๋ฐ”๋กœ ์•ž์— ์˜ค๋Š” ํ•„์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜ (a)๋ฅผ ์„ค์ •ํ•ด์ฃผ๊ณ , ap์— ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฅด์ณ ์ค€๋‹ค

 

- va_arg(ap, ์ธ์ˆ˜ ํƒ€์ž…) : ap์— ์ง€์ •๋œ ์œ„์น˜์—์„œ ์ธ์ˆ˜ ํƒ€์ž…์˜ ๊ฐ’๋งŒํผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ๋‹ค์Œ ๋ชฉ๋ก์„ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ap๋ฅผ ์ธ์ˆ˜ ํƒ€์ž…์˜ ๊ฐ’๋งŒํผ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค

* ๊ณผ์ œ์—์„œ ์ œ์‹œํ•œ ์ž๋ฃŒํ˜•

c : int

s : char *

p : void *

d : int

i : int

u : unsigned int

x(X) : unsigned int

๋กœ ์ž๋ฃŒํ˜•์„ ์ง€์ •ํ•ด์•ผํ•œ๋‹ค.

- va_end : ๋ชจ๋“  ์ธ์ˆ˜๋ฅผ ๊ฒ€์ƒ‰ํ•œ ํ›„ ํฌ์ธํ„ฐ๋ฅผ NULL๋กœ ์„ค์ •ํ•œ๋‹ค

 

- va_arg ๋Š” ํ˜„์ž ์ธ์ˆ˜๋ฅผ ๋ฆฌํ„ด, ๋‚˜๋จธ์ง€๋Š” ๊ฐ’์„ ๋ฆฌํ„ดํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

 

 ์ƒ๊ฐ๊ฑฐ๋ฆฌ

 

- ๊ฐ ์ž๋ฃŒํ˜•๋ณ„ ํŒŒ์‹ฑ

์ฒ˜์Œ์—๋Š” ๋ชจ๋“  ํ”Œ๋ž˜๊ทธ์™€ ์˜ต์…˜์„ ์ •๋ฆฌํ•œ ํ›„์— ๋™์ ํ• ๋‹นํ•ด์„œ ํ•œ๋ฒˆ์— ๋ชจ๋“  ํ”Œ๋ž˜๊ทธ์™€ ์˜ต์…˜์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํŒŒ์‹ฑํ–ˆ์—ˆ๋Š”๋ฐ

precision ๊ณผ width ๋“ค์ด ์˜ˆ์™ธ์ƒํ™ฉ์ด ๋„ˆ๋ฌด ๋งŽ์•„์„œ ๊ฒฐ๊ตญ ๋ฌธ์ž์—ด ๋”ฐ๋กœ ๊ณต๋ฐฑ or '0' ๋”ฐ๋กœ ๋™์ ํ• ๋‹น ํ•ด์„œ strjoin์œผ๋กœ ํ•ฉ์ณ์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์„ ํƒํ–ˆ๋‹ค.

 

- ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

get_next_line ๋ณด๋‹ค ์ „์ฒด์ ์ธ ํ๋ฆ„์ด ์–ด๋ ต์ง„ ์•Š์•˜์ง€๋งŒ ์ผ€์ด์Šค๊ฐ€ ๋งŽ๊ณ  ์˜ˆ์™ธ์ƒํ™ฉ์ด ๋งŽ์•„์„œ ํ•จ์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๊ณ  ๋ณต์žกํ•ด์ง„๊ฑฐ ๊ฐ™๋‹ค

์ •๋ฐ€๋„์™€ '0'flag '-'flag ์˜ ๊ด€๊ณ„, %s ์ผ๋•Œ NULL์ด ๋“ค์–ด์™”์„ ๋•Œ, d, i, u, x, X, p ์—์„œ ์ •๋ฐ€๋„๊ฐ€ 0์ด๊ณ  0์ด ๋“ค์–ด์™”์„๋•Œ ๋“ฑ๋“ฑ... ์ƒ๊ฐ๋‚˜๋Š” ์˜ˆ์™ธ์ฒ˜๋ฆฌ๊ฐ€ ๋งŽ๋‹ค.

 

- undefined behavior

๊ธฐ์กด์— ์กด์žฌํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์žฌํ˜„ํ•ด์•ผ ํ•˜๋‹ค๋ณด๋‹ˆ printf ์—์„œ undefined behavior ์ธ ์ƒํ™ฉ๋“ค์€ ๊ณ ๋ คํ•˜์ง€ ๋ง์ž!

์ด ์ƒํ™ฉ๋•Œ๋ฌธ์— ํ•˜๋ฃจ์˜ ์ ˆ๋ฐ˜์„ ๋‚ ๋ ค๋จน์—ˆ๋‹ค.

 

- free()

๋™์ ํ• ๋‹น ํ•˜๊ณ  ๋‹ค ์‚ฌ์šฉํ•œ ํ›„์—๋Š” ๊ผญ ํ•ด์ œํ•˜์ž ์žŠ์ง€๋ง๊ณ  ๋‘๋ฒˆ ๋ณด๊ณ  ์„ธ๋ฒˆ ๋ณด์ž

'42' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

FdF  (0) 2021.11.30
push_swap  (0) 2021.07.15
Born2beroot  (2) 2021.06.04
get_next_line  (0) 2021.05.13