๐ Libft: C ์ธ์ด์์ ์ฒซ ๋ง๋จ, ๋๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ง๋ค๊ธฐ
๊ฐ๋ฐ์ ๋ต์ ์๋ค. ์๋๋ฉด ๊ฐ๋ฐ์ด๋ ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ด๋ค.
๋๊ตฌ๋ค์ ๋ค์ํ๊ณ , ๊ทธ ๋๊ตฌ๋ค์ ์ด๋ค ์ฐ๊ฒฐ์ด ์ผ๋ง๋ ๋ณต์กํ๊ณ , ์ต์ ํ๋๋ฉฐ, ๊ทธ๊ฑธ ํตํด ๋์ผํ ๊ฒฐ๊ณผ๋ผ๋ ๋๋ผ์ด ๊ฒฐ๋ก ์ ๋๋ฌํ๋๊ฐ. ํนํ๋ ๋จ ํ ์ฌ๋์ ์ด์ผ๊ธฐ๊ฐ ์๋๋ผ, ์ฌ๋ฌ ์ฌ๋๋ค์ ํ์ ์ด ๋๋ฉด ๊ทธ ๋๋ถํฐ ๊ฐ๋ฐ์ ๋จ์ํ โ๋ง๋ ๋คโ์ ์์ญ์์ โ์์ โ๊น์ง๋ ๋๋ณผ ์ ์๋ ๊ฝค๋ ๊ทธ๋ด ์ธํ ์ํ์ด ๋๋ค.
42 ํ๋์ค๋ฅผ ๊ฑฐ์ณ, 42 ์์ธ์ ๊ทธ๋ฐ ์ฒ ํ์ ์ธ์ ํ๋ค.
๊ทธ๋ ๊ธฐ์ ๋ต์ ์๊ณ , ๊ทธ์ ๋ชจ๋์๊ฒ ์ ๊ณต๋๋ ๊ฒ์ ๋จ ํ๋์ ๋ช ์ ์๋ค. ๋ฌธ์ ๋ ์ค๊ฒ, ๋ต์ ๋๊ฐ ์ฐพ์๋ด. ๊ทธ๋ฆฌ๊ณ ๋๋ฃ๋ค๊ณผ ๊ทธ ๊ณผ์ ์ ์น๋ฐํ๊ฒ, ์๋ฐํ๊ฒ, ๊ทธ๋ฆฌ๊ณ ์น์ดํ๊ฒ ๊ณ ๋ฏผํด๋ด.
๋ค์ ํ๊ธฐ๋ฅผ ์์ฑํ๊ฒ ๋ ์ง๊ธ ์ด์๊ฐ์๋ 42์์ธ์ ๊ทธ ๊ฐ์น๋, ๊ทธ ๊ณผ์ ์ ๊ฐ๋ฐ์ด ์ ๋งค๋ ฅ์ ์ด๊ณ , ์ด์ ๋ ์ โ๋์๊ฒ ๋ง๋ ์ผ์ด๋คโ ๋ผ๊ณ ์๊ฐํ๊ฒ ๋์๋๊ฐ๋ฅผ ๋ค์ ํ ๋ฒ ๋๋ผ๊ฒ ๋ง๋ ๋ค.
๊ทธ๋ ๊ธฐ์ ft(forty two)๋ผ๋ ํค์๋๋ ์ ๋ํ ์ต์ํ์ง๋ง, ๋์์ โ๋ญ์ง ๋ชจ๋ฅผ ๋๋โ์ ์ฃผ๋ ํค์๋์ด๋ฉฐ, ๊ทธ๋ฐ ํค์๋์ ํจ๊ป ์์ํ๋ libft๋ผ๋ ๊ณผ์ ๋ 42 ์์ธ์์์ ๋ด ์ฒซ ๋ฒ์งธ ํ๋ก์ ํธ์ด์, C์ธ์ด์ ๊น์ ๋ฌผ์ ์ฒ์์ผ๋ก ๋ฐ์ ๋ด๊ฐ๋ ์๊ฐ์ผ๋ก ๊ธฐ์ตํ๋ค.
์คํ ์์ค๋ผ๋ ํค์๋๋ ๋ง๋๋ ํ์์ ํ๋ฑํจ์ ์ถ๊ตฌํ๊ณ , ๊ทธ ์์ค์ ์๊ฒจ๋ ๋ฆฌ๋ ์ค๋ผ๋ ์์คํ ๊ณผ ๊ทธ ์ฒ ํ์ ์ปค์ ธ๊ฐ๋ฉด์ ํ๋ ์ปดํจํ ์ ์ ์์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ฐ ๋ฆฌ๋ ์ค์ ํ์ค, ๊ธฐ๋ฐ๋ค์ ์ฒ์์ ๋ณด๊ธฐ์ ์์ํ๋ค. ์ ๊ตณ์ด ์ด๋ฐ๊ฑธ? ์ด๋ผ๊ณ ๊ทธ๋ ๋น์์๋ ์๊ฐํ์ง๋ง, ์ง๊ธ ์๊ฐํด๋ณด๋ฉด ๊ฒฐ๊ตญ ์ง๊ธ, ์์ ์ปดํจํ ์, AI ๋ฑ ์จ๊ฐ ํค์๋์ ์๋ฐ์ ์ด ๋จ์ด ํ๋๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฌ๋ ์์ ์์ ๋น๋กฏ๋์์์ ๊นจ๋ฌ์๋ค๋ ์ ์์ ๊ฐ๋ฐ์๋ค์๊ฒ ์ปดํจํฐ์ ์ดํด๋ ์ด๋์ ์ค๋๊ฐ? ํ๋ค๋ฉด ๋ฐ๋ก ์ฌ๊ธฐ์๋ถํฐ๋ผ๊ณ ์์ ์๊ฒ ๋งํ ์ ์์ ๊ฒ์ด๋ค.
C ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์๋ค์ ์ง์ ๋ด ์์ผ๋ก ๊ตฌํํด์ผ ํ๋ ์ด ๊ณผ์ ๋, ๋ง์น C์ธ์ด์ ์ฌ์ฅ๋ถ๋ฅผ ํด๋ถํ๋ ๊ฒ๊ณผ ๊ฐ์ ๊ฒฝํ์ด์๋ค. ์๋ง์ ๋ฐค์ man ํ์ด์ง์ ํจ๊ป ์ง์์ฐ๋ฉฐ, ํฌ์ธํฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ์จ๋ฆ, printf ๋ฅผ ๋ก์ง์ ์์น ์์น๋ง๋ค ์ฐ์ด๋ณด๋ ๊ทธ ๊ณผ์ โฆ ์ง๊ธ ์๊ฐํ๋ฉด ์ผ๋ง๋ ๊ณ ํต์ค๋ฌ์ ๋์ง ๋ชจ๋ฅธ๋ค.
์ด ํ๋ก์ ํธ๋ ๋จ์ํ ํจ์๋ฅผ ๋ฒ ๋ผ๋ ๊ฒ์ด ์๋๋ผ, ๊ทธ ์๋ ์๋ฆฌ, ์ปดํจํฐ์ ์ํต ๋ฐฉ์์ ๊ทผ๋ณธ๋ถํฐ ์ดํดํ๊ณ , ๋๋ง์ ์ฝ๋๋ก ์ฌ์ฐฝ์กฐํ๋ ๊ณผ์ ์ด์๋ค.
๐ ์ฃผ์ ํ์ต ๋ด์ฉ (Key Learnings)
libft ํ๋ก์ ํธ๋ ํฌ๊ฒ ์ธ ๋ถ๋ถ์ผ๋ก ๋๋ ์ ์๋ค.
ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์๋ฅผ ๊ตฌํํ๋ Part 1,
์กฐ๊ธ ๋ ๋ณต์กํ๊ณ ์ ์ฉํ ํจ์๋ค์ ๋ง๋๋ Part 2,
๊ทธ๋ฆฌ๊ณ ์ฐ๊ฒฐ ๋ฆฌ์คํธ(Linked List)๋ฅผ ๋ค๋ฃจ๋ Bonus ํํธ
1. ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์ ์ฌ๊ตฌํ (Re-implementing Standard Library Functions)
์ฌ๊ธฐ์๋ C ์ธ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฆฌ๋ ์ค ์์คํ ์ด ์ฌ์ฉํ๋ ์ธ์ด์ ํน์ง, ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ธ์ด๋ฅผ ํตํด ๋ค์ ์ฌ๋์ ๋ช ๋ น์ ์ด๋ป๊ฒ ํํํ๋ฉด ๋ ์ง, OS ๊ฐ ์ด๋ป๊ฒ ์ดํดํ๋์ง๋ฅผ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ผ๋ก ์ดํดํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ ๋ค.
- ๋ฉ๋ชจ๋ฆฌ ๋ค๋ฃจ๊ธฐ (
<string.h>๋ฑ):memset,memcpy,memmove๊ฐ์ ํจ์๋ค์ ๋ง๋ค๋ฉด์ ํฌ์ธํฐ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ํ ์ดํด๊ฐ ๊น์ด์ก๋ค. ํนํmemcpy์memmove์ ์ฐจ์ด์ , C ์ธ์ด์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ๋ฐฉ์์ ๋ฐ๋ผ, ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒ๋ฉ(overlap) ๋ฌธ์ ๊ฐ ๋ฐ๊ฒฌํ๊ณ , ์ด๋ป๊ฒ ํด๊ฒฐํ๋์ง๋ฅผ ๋ฐฐ์ ๋ค. โ์๋, ๊ทธ๋ฅ ๋ณต์ฌํ๋ฉด ๋๋ ๊ฑฐ ์๋?โ ์ถ์๋ฐ, ์ฃผ์ ๊ฐ์ด ๊ฒน์น ๋์ ๊ทธ ๋ฏธ๋ฌํ ์ฐจ์ด๋ฅผ ์ดํดํ๊ณ , C ์ธ์ด๋ผ๋ ๊ฑธ ๊ธฐ๋ฐ์ผ๋ก ๋ฌด์ธ๊ฐ๋ฅผ ๋ง๋ ๋ค๊ณ ํ๋ ๊ฒ์, ์ธ์ด์ ์ ํด์ง ํน์ฑ๋ค์ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ค ํ๊ณ๊ฐ ์๊ธฐ๋์ง ์ฒ์ ์ดํดํ๋ ์๊ฐ์ด์๋ค. - ๋ฌธ์์ด ๊ฐ๊ณ ๋๊ธฐ (
<string.h>๋ฑ):strlen,strlcpy,strlcat,strchr,strncmp๋ฑ๋ฑโฆ C์ธ์ด์์ ๋ฌธ์์ด์ด ์ฌ์ค์char๋ฐฐ์ด์ด๋ฉฐ, ์๋ฃ ํ์ ๋ค์ ๊ฒฐ๊ตญ ์ด๋ฌํ ๋ฐ์ดํฐ์ด์ ์ฐ์์์ ๋ฐฐ์ ๋ค. ํนํ ๋ฌธ์์ด์ ํธ์ง ๊ณผ์ ์์, ๋ฐ์ดํฐ์ โ๋จ์โ๋ฅผ ์ํNULL๋ฌธ์์ ์ค์์ฑ๊ณผ ๋ฒํผ ์ค๋ฒํ๋ก์ฐ(buffer overflow)๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํstrlcpy์ ์์คํจ ๋ฑ์ ๋๋ ์ ์๋ ์๊ฐ์ด์๋ค. - ๋ฌธ์ ํ๋ณ๊ณผ ๋ณํ (
<ctype.h>๋ฑ):isalpha,isdigit,isalnum๊ฐ์ ํจ์๋ค์ ๋น๊ต์ ๊ฐ๋จํ์ง๋ง, ์ปดํจํฐ๊ฐ ์ฌ๋์ ์ธ์ด๋ฅผ ํํํ๋ ์์คํค ๋ฌธ์ ๋ฑ์ ๋ํด ์๋ฒฝํ ์ดํด๊ฐ ํ์ ํ๋ค. - ๋ฌธ์์ด์ ์ซ์๋ก (
<stdlib.h>๋ฑ): ๊ฐ์ฅ ๋์ด๋ ์๋ ์์ญ์ด์๋๋ฐ,atoi๋ฅผ ๊ตฌํํ๋ฉด์ ์จ๊ฐ ์์ธ ์ผ์ด์ค(๊ณต๋ฐฑ, ๋ถํธ, ์ซ์ ์๋ ๋ฌธ์ ๋ฑ)๊ฐ ์ ์๊ธฐ๋์ง, ๊ทธ๋ฆฌ๊ณ ํนํ๋ ๋๋ฃ ํ์ต์ ํตํด ์ด๋ฐ ์์ธ ์ฒ๋ฆฌ๊ฐ ์ผ๋ง๋ ์ค์ํ์ง๋ฅผ(โฆ) ๋ผ์ ๋ฆฌ๊ฒ ๊นจ๋ฌ์๋ ๊ธฐ์ต์ด๋๋ค.
2. ๋๋ง์ ์ ํธ๋ฆฌํฐ ํจ์ ๊ตฌํ (Implementing Additional Utility Functions)
Part 1์ด โ๋ชจ๋ฐฉโ์ ๋จ๊ณ์๋ค๋ฉด, Part 2๋ โ์ฐฝ์กฐโ์ ๋จ๊ณ์๋ค. ์ฃผ์ด์ง ๋ช ์ธ์ ๋ฐ๋ผ Part 1์์ ๋ง๋ ์์ฃผ ๊ธฐ์ด ๋จ์์, ๋ฉ๋ชจ๋ฆฌ ์์ ๋ฐ์ดํฐ ํ๋๋ฅผ ์์ ํ๊ฑฐ๋, ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ๋ฐ์ดํฐ ํ์์ผ๋ก ๋ฐ๊พธ๋ ๋ฑ์ ๊ธฐ์ ์ ๋ฐฐ์ ์ผ๋, ์ด๊ฒ๋ค์ ๋ํ(wrapping) ํด๋ณด๋ ๊ฒ์ ์๊ตฌํ๋ค.
ft_split: ์ด ๋ ์์ด ์๋ง ์ต์ข ๋ณด์ค ์์ ๊ฒ์ด๋ค. ๐ ๋ฌธ์์ด์ ํน์ ๊ตฌ๋ถ์(delimiter) ๊ธฐ์ค์ผ๋ก ์ชผ๊ฐ์ 2์ฐจ์ ๋ฐฐ์ด์ ๋ด์ ๋ฐํํ๋ ํจ์์ธ๋ฐ, ๋ฉ๋ชจ๋ฆฌ ๋์ ํ ๋น๊ณผ ๋น์ ๋ฐฐ์ด์ ๊ด์ , ํนํ ์ฐจ์์ ๊ฐ์ง๊ณ ๋ฐฐ์ด์ ๋ง๋๋ ๊ฒ์ด ๋จธ๋ฆฟ์์ ๊ตฌ์กฐํ๊ฐ ์ ํ ๋์ง ์์(โฆ) ์ ๋ง ์ด๋ ค์ ๋ค. ํ ๋นํด์ผ ํ ๋ฉ๋ชจ๋ฆฌ์ ํฌ๊ธฐ๋ฅผ ์ ํํ ๊ณ์ฐํ๊ณ , ์ค๋ฅ๊ฐ ๋ฌ์ ๋ ์ด๋ฏธ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ชจ๋ ํด์ (free)ํด์ฃผ๋ ๋์(leak) ๋ฐฉ์ง ์ฒ๋ฆฌ๊น์งโฆ ์ปดํจํฐ๊ฐ ๊นจ๋ํ๊ฒ ์ผ์ ์์ํด, ๋ง๋ฌด๋ฆฌ ์ง๊ธฐ๊น์ง ์ ๋ง ๋ง์ ๊ฑธ ๋ฐฐ์ธ ์ ์์๋ ํจ์์๋ค.ft_itoa: ์ ์๋ฅผ ๋ฌธ์์ด๋ก ๋ฐ๊พธ๋ ์ด ํจ์๋INT_MIN๊ฐ์ ๊ทน๋จ์ ์ธ ์ผ์ด์ค๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒ ํต์ฌ์ด์๋ค. ์ฌ์ค split ์ ์ด๋ ค์ํ์ฌ ๋จผ์ ํ์๋๋ฐ, ๊ฒฐ๊ตญ ๊ฐ ์๋ฃํ์ ์ด ํํํ ์ ์๋ ์ซ์์ ์, ๊ทธ๋ฆฌ๊ณ ์์์ ์ธ๊ธํ ์ผ์ด์ค๋ค ์กฐ์ฌ๋ฅผ ํ๋ฉด์ ์ ๋ง ๋ง์ด ํ๋ ธ์๋ ๊ธฐ์ต์ด ์๋ค.ft_substr,ft_strjoin,ft_strtrim: ๋ฌธ์์ด์ ์๋ฅด๊ณ , ํฉ์น๊ณ , ํน์ ๋ฌธ์๋ฅผ ์ ๊ฑฐํ๋ ๋ฑ, ์ ์๋ ๋จ์ํ ๋ฉ์๋ ํ๋๊ฐ ํ๋์ ์ ์ฒด ์์ ์ ๋ด๋นํ๊ณ ์์๋ค๋ฉด ๊ทธ๊ฒ์ ๊ตฌ๋ถํ๊ณ , ๋จ๊ณ๋ฅผ ๊ตฌ์ฑํ๋ ์ฐ์ต์ ์ด ๋ฉ์๋๋ค ๊ธฐ๋ฐ์ผ๋ก ์ฒ์ ํด๋ดค๋ ๊ธฐ์ต์ด๋๋ค.
3. ๋ณด๋์ค: ์ฐ๊ฒฐ ๋ฆฌ์คํธ ๋ค๋ฃจ๊ธฐ (Handling Linked Lists)
๋ฐฐ์ด๊น์ง๋ ์ ๊ทผํ์ผ๋, ๋ค์์ ์ด์ง ๋ง๋ณผ ์ ์๋ ๊ธฐํ๊ฐ ํด๋น ๋ณด๋์ค ๋ด์ฉ์ด์๋ค.
typedef struct s_list
{
void *content;
struct s_list *next;
} t_list;
์ถ์ํ๋ ๊ฐ๋ , โ๋ ธ๋โ๋ ๊ฝค๋ ์ ์ ํ๋ค. ๋จธ๋ฆฟ์์์, ํน์ ์ํ์ด๋ ๊ณผํ์์ ์ฌ์ฉ๋๋ ๊ฐ๋ ์ ์บก์์ ๋ง๋ค๊ณ , ๊ทธ ์บก์์ ํ์ฉํ ์ถ์์ ์ธ ํํ์ ์คํ๋ ค ๊ตฌ์กฐ๋ก ๋ง๋๋ ๊ณผ์ . ๊ทธ๋ ๊ฒ ๋์์ ๋, ๋จ์ํ ์์์ผ๋ก ํ์ด ๋ด๋ ค๋ฉด ๋ณต์กํ ์ ์๋ ๊ฒ์ ์ข๋ ๊ฐ์์ ์ผ๋ก ์ธ์งํ๊ธฐ ์ฉ์ดํ๊ฒ ๋ง๋ ๋ค๋ ๊ฐ๋ ์, ์ํฌ์์๋ ๋์๊ฒ๋ ๋๋จํ ์ ์ ํ ์ถฉ๊ฒฉ์ด์๋ค.
์ด์ฒ๋ผ ๊ฐ๋จํ ๊ตฌ์กฐ์ฒด๋ก ๋
ธ๋(node)๋ฅผ ๋ง๋ค๊ณ , ๊ทธ ๋
ธ๋๋ค์ ์ฎ์ด์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค๊ณ , ์๋ก์ด ๋
ธ๋๋ฅผ ์ถ๊ฐํ๊ณ (lstnew, lstadd_front, lstadd_back), ๋ฆฌ์คํธ๋ฅผ ์ํํ๊ณ (lstiter), ์ญ์ ํ๋(lstdelone, lstclear) ๋ฑโฆ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๊ธฐ๋ณธ์ ์ธ ๋ชจ๋ ๊ฒ์ ๊ตฌํํ์ ๋, ๋ ๋ณต์กํ ๋ฌธ์ ๋ ๋ฐ์ดํฐ์ ์ฒ๋ฆฌ๋ฅผ ํจ์ฌ ๋น ๋ฅด๊ฒ ๋์ํ๋๊ฒ ๊ฐ๋ฅํ๋ค. ํนํ t_list **lst์ฒ๋ผ ์ด์ค ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํด์ ๋ฆฌ์คํธ์ ์์ ์ฃผ์ ์์ฒด๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ ft_lstadd_front ๊ฐ์ ํจ์๋ ํฌ์ธํฐ์ ๋ํ ์ดํด๋๋ฅผ ํ ๋จ๊ณ ๋์ด์ฌ๋ ค์ค ๊ธฐ์ต์ด์๋ค.
๐ ๏ธ Makefile์ ๋ง๋ฒ (The Magic of Makefile)
ํ๋ก๊ทธ๋๋ฐ, ์ฝ๋ฉ๋ง ํ๋ค๋ณด๋ฉด ์๋ ๊ฒฝ์ฐ๋ ๋ง๊ณ , ํนํ ์์ฆ์ ์ธํฐํ๋ฆฌํ
์ธ์ด๋ฅผ ๋ง์ด ์ฐ๊ฒ ๋๋ค๋ณด๋ ์๊ณ ์ด์์ง๋ง. ๋ณธ ๊ณผ์ ์์๋ C ์ฝ๋๋ฟ๋ง ์๋๋ผ Makefile ์์ฑ๋ฒ์ ์ ๋๋ก ๋ฐฐ์ด ์ฒซ ๊ฒฝํ์ด๊ธฐ๋ ํ๋ค. ๋จ์ํ gcc ๋ช
๋ น์ด๋ฅผ ๋์ดํ๋ ๊ฒ์ ๋์ด, ๋ณ์๋ฅผ ์ฌ์ฉํ๊ณ , %.o: %.c ๊ฐ์ ๊ท์น์ ๋ง๋ค๊ณ , all, clean, fclean, re, bonus ๊ฐ์ ๋ชฉํ(target)๋ฅผ ์ค์ ํ๋ฉด์ ๋น๋ ์๋ํ๋ฅผ ์ง์ ํ์ฌ ์ปดํจํฐ๊ฐ ์ดํดํ ์ ์๋ ๋ชฉ์ ํ์ผ์ ๋ง๋ค์ด๋ธ๋ค. ์ด ๊ณผ์ ์ ํตํด ๋ง๋ค์ด์ง libft.a๋ผ๋ ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(static library)๋ ๊ทธ ๋ค๋ก C ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ ๋์ ์ ์ฉํ ๋๊ตฌ๊ฐ ๋์ด ์ฃผ์๋ค.
๐ค ์ฑ์ฐฐ ๋ฐ ๋ฐฐ์ด ์ (Reflection & Lessons Learned)
libft ๊ณผ์ ๋ฅผ ๋๋ฃ๋ค๊ณผ ์ด์ผ๊ธฐ ํ๊ณ , ๋ฉ๋ชจ๋ฆฌ๋, ์ถ์์ ๊ฐ๋
์ ์ค๋ช
ํ๊ฑฐ๋, Makefile์ ์์คํค ์ดํํธ๋ฅผ ๋ฃ๋ ๋ฑ์ ์์
์ ์ ๋ง ์ฌ๋ฐ๋ ์์
์ด์, ์๊ฐ ๊ฐ๋ ์ค ๋ชจ๋ฅด๋ ์์
์ด์๋ค.
- ๋ฉ๋ชจ๋ฆฌ, ๊ทธ๋ฆฌ๊ณ ํฌ์ธํฐ: C๊ฐ ์ ๊ฐ๋ ฅํ๊ณ , ๋์์ ์ ์ํํ ์ธ์ด์ธ์ง ๋ชธ์ ์ฒดํํ๋ค. ๋ด๊ฐ ์ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ณ ํด์ ํ๋ฉด์ ์ ๊ทธ๋ฆฌ ๋ฌธ์ ๊ฐ ๋๊ณ , ์ค์ ๋ก ๋ค๋ฅธ ์ธ์ด๋ค์ ์ฐ๊ฒ ๋๋ ์ด์ ๊ฐ ๋ญ์ง๋ฅผ ์ ์ ์์๋ค.
- ๋ฌธ์ ํด๊ฒฐ ๋ฅ๋ ฅ:
manํ์ด์ง๋ฅผ ์น๊ตฌ ์ผ์, ์๋ง์ ์ค๋ฅ์ ์ธ๊ทธํด(segmentation fault)์ ๋๋ฒ๊น ํ๋ฉด์ ๋์ง๊ธฐ๊ฒ ๋ฌธ์ ๋ฅผ ํ๊ณ ๋ค์๋ค. ํนํ man ํ์ด์ง๋ ์์ด๋ก ๋์ด ์๊ธฐ๋ ํ๊ณ ๊ฐ๋ฐ์์ ์ธ์ด๋ก ์ ํ ์๋ค๋ณด๋ โ๊ฐ๊ฒฐโ ํ์ง๋ง ๋์์ ์ด๋ ์์ญ์์ ์ผ๋ง๋ ์ด ๋ฉ์๋๊ฐ ์์ง์ด๋ ๊ฑด๊ฐ? ์ ๊ฐ์ ๋ด์ฉ๋ค์ ๋ค ํ์ ํ ์ ์๋ค๋ ์ ์์ ์ฒซ ๊ณผ์ ๋ ๋๋ต 1๋ฌ์ ์๊ฐ์ด ๋ค์๋ค. - ์ฝ๋ ๊ท์ฝ(Norm): 42์ ์๊ฒฉํ ์ฝ๋ ์คํ์ผ ๊ท์ฝ(Norminette)์ด๋ ๊ฒ๋ ์ผ์ข ์ ๋ถ๋ง ์ด์๋ค. ๋ช์ ๋ด์ ์์ฑ์ด ๋์ด์ผํ๊ณ , ์ธ์ด์ ์ปจ๋ฒค์ ์ ์ง์ผ์ผ ํ๋ ๋ฑ์ ์ผ๋ค์ ๋๋์ฒด ์ ๊ทธ๋ ๊ฒ๊น์ง ํ์ํ๊ฐ ๋ผ๊ณ ์๋ฌธ์ ํ์์๋๋ฐ, ์ง๊ธ ์๊ฐํ๋ฉด ์ผ๋ง๋ ์ค์ํ โํ๋ก์ธ์คโ์๋์ง๋ฅผ ์์ผ ๋๋ ์ ์๋ค.
๋์ด์ผ๋ณด๋ฉด libft๋ ๋จ์ํ ๊ณผ์ ๊ฐ ์๋๋ผ, C์ธ์ด๋ผ๋ ์ธ๊ณ๋ฅผ ํํํ๊ธฐ ์ํ ๋๋ง์ ์ง๋์ ๋์นจ๋ฐ์ ๋ง๋๋ ๊ณผ์ ์ด์์ด. ๋น๋ก ํ๋ค์์ง๋ง, ์ด ํ๋ก์ ํธ๋ฅผ ํตํด ์ป์ ์ง์๊ณผ ๊ฒฝํ์ ์์ผ๋ก ์ด๋ค ์ด๋ ค์์ด ๋ฅ์ณ๋ ํค์ณ๋๊ฐ ์ ์๋ ๋จ๋จํ ๊ธฐ์ด๊ฐ ๋์ด์ฃผ์๋ค. ํนํ๋ ์ ๋ง ๋น ๋ฅธ ์น๊ตฌ๋ค์ ์์๊ฐ์ ์์ฑ์ํค๊ณ ๋ค๋ฅธ ๊ณผ์ ๋ฅผ ํ๊ณค ํ๋ค. ๊ทธ๊ฑธ ๋ฐ๋ผ๋ณด๋ ๋ด ์
์ฅ์์ ์ฐธ ๋น์ฐํ ๋น๊ต์ ์ธ ์๊ฐ, ๋ด๊ฐ ์ ๋ง ์ด ๋ถ์ผ์ ์ด์ธ๋ฆฌ๋ ์ฌ๋์ธ๊ฐ? ํ๋ ๋ถํ, ๋ถ๋ง๋ ์๊ฒผ์ง๋ง ์คํ๋ ค ๋๊น์ง ๋ถ์ก๊ณ ํ๋ฌ์ ๊ฑธ์ณ ์์ฑํ๋ ๋ด ํ๋ก์ ํธ๋ฅผ ํตํด, โํ๋ฉด ๋๋คโ๋ผ๋ ๋ง์ฐํ์ง๋ง ํ๊ณ ํ ์ ๋ขฐ๊ฐ์ด ์๊ฒผ๋ ์ฒซ ํ๋ก์ ํธ๊ฐ ์๋์๋ ์ถ๋ค. ๐ช
