๐ณ 42 SEOUL
[42seoul / ft_printf] ํ๋ก์ ํธ ๋ด์ฉ ๋ฐ ์์์ผ ํ ๋ด์ฉ
Newmon
2021. 5. 27. 14:50
ft_printf
Summary && Introduction
printf
ํจ์๋ฅผ ๋๊ฐ์ด ๊ตฌํํ๋ผ.- ์ฐจํ ํ๋ก์ ํธ์์ ์ฌ์ฉ ๋ ๊ฒ์ด๋ค.
- ๊ฐ๋ณ์ธ์์ ๋ํ ์ฌ์ฉ๋ฒ์ ๋ฐฐ์ด๋ค.
- ์ฑ๊ณต์ ์ธ ft_printf ์ ํต์ฌ์ ๊ตฌ์กฐํ ๋ฐ ํ์ฅ ๊ฐ๋ฅํ ์ฝ๋์ด๋ค.
Common Instructions
- Norm check๋ฅผ ์ค์ํ์ฌ ์ฝ๋๋ฅผ ์์ฑํ๋ผ. (๋ณด๋์ค ํํธ ํฌํจ) - ์๋์ 0์ ๋ถ์ฌ
- ํจ์ ์์ฑ์ segmentation fault, bus error, double free ๋ฑ๋ฑ์ ๊ฐ์์ค๋ฐ ์ข ๋ฃ์ ์ฃผ์ํด๋ผ. - ์๋์ 0์ ๋ถ์ฌ
- ๋ฉ๋ชจ๋ฆฌ ๋์๋ ํ์ฉ๋์ง ์๋๋ค. ๋ชจ๋ ํ ๋น๋ ํ ๋ฉ๋ชจ๋ฆฌ์ ๋ํ์ฌ ์ ์ ํ free๋ฅผ ํด์ผํ๋ค. - ์๋์ 0์ ๋ถ์ฌ
- relink ๋์ง ์์ Makefile์ ์์ฑํ์ฌ ์ ์ถํ๋ผ. ์ปดํ์ผ์
-Wall -Wextra -Werror
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ์ปดํ์ผํ๊ฒ๋๋ค. - Makefile์๋
$(NAME)
all
clean
fclean
re
๋ฅผ ํฌํจํ์ฌ์ผ ํ๋ค. - ์ด ํ๋ก์ ํธ์์ libft๋ฅผ ์ฌ์ฉํ๋ค๋ฉด, ์์คํ์ผ๊ณผ ๊ด๋ จ makefile์ ํจ๊ป libftํด๋์ ๋ฃ์ด์ผํ๋ค. ๊ทธ๋ฆฌ๊ณ ft_printf์ makefile์ libft๋ฅผ ์ปดํ์ผ ํ ํ์ ft_printfํ๋ก์ ํธ๋ฅผ ์ปดํ์ผํ์ฌ์ผ ํ๋ค.
Mandatory part
- ft_printf์ ์ํ์ ๋ฐ๋์
int ft_printf(const char *, ...)
๋กํด๋ผ. - Cํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ(libc)์ printf ํจ์๋ฅผ recodeํด์ผํ๋ค.
- ์๋ณธ printf์ฒ๋ผ buffer ๊ด๋ฆฌ๋ฅผ ํด์๋ ์๋๋ค.
- ๋ค์๊ณผ ๊ฐ์ ์์๋ฌธ์(conversion)๋ฅผ ๋ค๋ค์ผํ๋ค. :
cspdiuxX%
- ๋ชจ๋ ์์๋ฌธ์์์
-0.*
ํ๋๊ทธ์ ์ต์ ํ๋ ๋๋น(minimum field width)์ ๋ค๋ค์ผํ๋ค. - ์๋์ printf ํจ์์ ๋น๊ต๋ ๊ฒ์ด๋ค.
ar
์ปค๋งจ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋ค์ด๋ผ.libtool
์ ๊ธ์ง๋์ด์๋ค.
## ํ๋ก์ ํธ ์ ์์์ผํ ๋ด์ฉ
1. ๊ฐ๋ณ์ธ์ (variable argument)
https://infinitt.tistory.com/335
[C / 42seoul / ft_printf] - ๊ฐ๋ณ์ธ์ (variable argument)
๊ฐ๋ณ์ธ์ (variable argument) ๊ฐ๋ณ ์ธ์๋? C์ธ์ด์์๋ scanf ํน์ printf ์ฒ๋ผ ๋งค๊ฐ๋ณ์์ ๊ฐ์๊ฐ ์ ํด์ง์ง ์์ ํจ์๋ค์ด ์๋ค. ์ด๋ฐ ํจ์๋ค์ ์ฌ์ฉํ ๋๋ง๋ค ๋งค๊ฐ๋ณ์์ ๊ฐ์๊ฐ ๋ฌ๋ผ์ง๋ฉฐ, ์ด๋ฌํ ๊ฒ
infinitt.tistory.com