So, when I read C, I know what the assembly language will look like, and that's something I care about.
C๋ฅผ ์ฝ์ผ๋ฉด ์ด์ ๋ธ๋ฆฌ์ด๊ฐ ์ด๋ป๊ฒ ์๊ฒผ๋์ง ์ ์ ์๊ณ , ๊ทธ๊ฒ์ด ์ ๊ฐ ์ ๊ฒฝ ์ฐ๋ ๋ถ๋ถ์ ๋๋ค.
-- ๋ฆฌ๋์ค ํ ๋ฅด๋ฐ์ค(๋ฆฌ๋ ์ค ์ปค๋๊ณผ Git ์์คํ ์ ์ฐฝ์์)
https://www.youtube.com/watch?v=CYvJPra7Ebk
printf
๋ ์ ๋ง๋๋์?์ฐ๋ฆฌ๋ ํ๊ต์์ ์ปดํจํฐ ๊ณผํ์ ๊ณต๋ถํ๋ฉด์ ์ด์์ฒด์ , ์ปดํจํฐ ๊ตฌ์กฐ ๋ฑ์ ๋ฐฐ์ฐ์ง๋ง, ์ค์ ํ๋ก์ ํธ๋ฅผ ์งํํ ๋๋ React, JavaScript, Node.js, Express, Python, Next.js, Java, Spring ๊ฐ์ ๋งค์ฐ ๊ณ ์์ค ์ธ์ด์ ํ๋ ์์ํฌ๋ฅผ ๋ค๋ฃจ๊ฒ ๋๋ค.
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์คํฉํธ๋ผ
์๊ฐํด๋ณด๋ฉด ์ด๋ฐ ํ์์ ๊ฝค๋ ๊ดด๋ฆฌ๊ฐ์ด ๋ ๋ค. ํ๊ต์์ ๋ฐฐ์ฐ๋ CS ๊ณผ๋ชฉ์ ๋๋ถ๋ถ ์ด๋ก ์ ๋ค๋ฃจ๊ณ , ์ฐ๋ฆฌ๋ 1~2์ฃผ ๋์ ์ต์ ์ ๋คํด ์๊ธฐ๋ฅผ ์๋ฃํ ์ง์์ผ๋ก ์ํ์ ๋ณธ๋ค.
๋ฐ๋ฉด, ์ ํํ๋ ํ๋ ์์ํฌ๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํด์๋ ๋ฐ๋ก ๋ง์ ์๊ฐ์ ๋ค์ฌ ๊ณต๋ถํ๊ณ ์ฐ์ตํ๋ค. ๊ทธ๋ด ๋๋ง๋ค "์ด๋ด ๊ฑฐ๋ฉด ํ๊ต์์๋ ํ๋ ์์ํฌ๋ฅผ ๊ฐ๋ฅด์น๋ฉด ๋๋ ๊ฑฐ ์๋๊น?"๋ผ๋ ์๊ฐ์ด ๋๋ ๊ฒ์ด ์ฌ์ค์ด๋ค. ์ค์ ๋ก, ํ๋ ์์ํฌ๋ฅผ ๋ช ๋ฌ๊ฐ ์ง์ค์ ์ผ๋ก ๊ฐ๋ฅด์ณ ์ทจ์ ์ ๋ชฉํ๋ก ํ๋ ์ฌ๋ฌ ๋ถํธ์บ ํ๊ฐ ์ ํํ๋ ํ์ค ๋๋ฌธ์ ์ด๋ฌํ ์๋ฌธ์ ์ธ์ ๋ ์ฐ๋ฆฌ๋ฅผ ๋ถํธํ๊ฒ ๋ง๋ค์๋ค.
๋ถํธํจ์ ๋๋๋ก ๊ณตํฌ๋ก ๋ณํด "CS ๊ณต๋ถ์ ๋ญ๋นํ ์๊ฐ์ผ๋ก ํ๋ ์์ํฌ๋ฅผ ๊ณต๋ถํ์!!!"์ ๊ฐ์ ๊ทน๋จ์ ์ธ ์ฃผ์ฅ์ผ๋ก ์ด์ด์ง๊ธฐ๋ ํ๋ค. ํ์ง๋ง ๋น์ฐํ๊ฒ๋ ์ด๋ ์ ๋ต์ด ์๋๋ผ๊ณ ์๊ฐํ๋ค. ์ ์ด๋ n๋ ์ ์๊ฐ์ ์์์ CS๋ฅผ ๊ณต๋ถํด์ผํ๋ ํ๊ฒฝ์ ๋์ฌ ์๋ค๋ฉด ๋์ฑ ๊ทธ๋ ๋ค.
๊ทธ๋ ๋ค๋ฉด CS๋ ์ ์ค์ํ ๊ฑธ๊น? ๊ทธ๊ฒ์ ์ฐ๋ฆฌ๊ฐ ์ข์ํ๋ ๊ณ ์์ค์ ํ๋ ์์ํฌ ๋ค์ด ๋ชจ๋ ํผํผํ๊ณ ๊ฒ์ฆ๋ ๋ฎ์ ์ถ์ํ ์์ค์ CS ๊ธฐ๋ฐ ์์์ ๊ฝ์ ํผ์ด ๊ฒ๋ค์ด๊ธฐ ๋๋ฌธ์ด๋ค!
๊ณ ๋ ์ธ๋์ธ๋ค์ ์ ์ค ์ ์ง๊ตฌ์ ๋ชจ์
์ฝ๋ผ๋ฆฌ๋ ๋์ฒด๋๊ฑฐ๋ ๋ฐ๋ ์ ์๋ค. ๊ทธ๋ฌ๋ ๊ทธ๋ค์ ๊ธฐ๋ฐ์ด ๋๋ ๊ฑฐ๋ถ์ด๋ ์ ๋ง ์ค๋ ์๊ฐ ๊ฑด์ฌํ๋ค. ๊ฑฐ๋ถ์ด๋ฅผ ์ดํดํ๊ณ ์๋ค๋ฉด, ๋น ๋ฅด๊ฒ ๋ฐ๋๋ ์ฝ๋ผ๋ฆฌ๋ฅผ ๊ทธ ์์ ์ฌ๋ ค๋๋ ๊ฒ์ ์์ํ๊ฒ ํ ์ ์๋ค. ๊ทธ๋ผ ๊ฑฐ๋ถ์ด๋ ๋ฌด์์ผ๊น? ๊ทธ๊ฒ์ ์ปดํจํฐ ๊ตฌ์กฐ, ์ด์์ฒด์ ๊ทธ๋ฆฌ๊ณ ์ด๋ค๊ณผ ์ง์ ์ ์ผ๋ก ์ํตํ๋ C์ธ์ด๋ผ๊ณ ์๊ฐํ๋ค. ์ฌ๊ธฐ์ C์ธ์ด์ ์ฃผ๋ชฉํด๋ณด์.
printf
๋ง๋ค๊ธฐ
printf(โhello worldโ)
๋ถ๋ฅ์ ๋ฐ๋ผ ๋ค๋ฅด๊ธด ํ์ง๋ง, ์ผ๋ฐ์ ์ผ๋ก C์ธ์ด๋ ๊ธฐ๊ณ์ด์ ๊ฐ๊น์ด ์ ์์ค ์ธ์ด๋ผ๊ณ ๋ฐฐ์ ๋ค. ๊ทธ๋ฌ๋ C์ธ์ด์์ ๊ฐ์ฅ ์ ๋ช
ํ ํจ์์ธ printf
๋ฅผ ํ ๋ฐ์ค์ ๋ง์ฒ๋ผ ์ด์
๋ธ๋ฆฌ์ด๋ก ์ฆ์ ์นํํด์ ์๊ฐํ ์ ์๋๊ฐ? ๋น์ฐํ์ง๋ง ๊ทธ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ค.
a = b + c
โ add r1 r2 r3for (i = 0; i < 10; i++) โฆ
โ beq ยทยทยท j ยทยทยท ~printf(โhello %s!!โ, โwordโ)
โ โฆ..?
๊ทธ๋ ๋ค. printf
๋ ๋ฎ์ ์์ค์ ์ธ์ด๋ผ๊ณ ์ฌ๊ฒจ์ง๋ C์์ ๊ฐ์ฅ ๋ํ๊ฒฉ์ผ๋ก ํํ ์ฐ์ด์ง๋ง, ์ฌ์ค ์๊ณ ๋ณด๋ฉด ์ด ํจ์๋ ์ถ์ํ ์์ค์ด ๋์ ๋งค์ฐ ๊ณ ์์ค ํจ์์๋ค! ์ฐ๋ฆฌ๋ printf
๋ฅผ ์ฌ์ฉํ์ ๋, ์ปดํจํฐ๊ฐ ์ด๋ค ์ผ์ ํ๋์ง ์์ํ๊ธฐ ์ด๋ ต๋ค!
์ด๋ ๋ด๋ถ์ ์ผ๋ก๋ ์ถ๋ ฅ์ ์ํด ์ด์ ์ฒด์ ์ ์์คํ
์ฝ์ธ write
ํจ์๋ฅผ ํธ์ถํ๋๋ฐ, printf
๋ ์ด write
๋ฅผ ํฌ๋งทํ
๊ธฐ๋ฅ์ผ๋ก ๊ฐ์ธ์ ๋ ํธ๋ฆฌํ๊ฒ ๋ง๋ค์ด์ฃผ๋ ํฌ์ฅ์ง ์ญํ ์ ํ๊ณ ์ด๋ฅผ ๊ฐ์ถ๊ณ ์๋ ๊ฒ์ด๋ค.
๋๋ค๋ฅธ ํฌ์ฅ์ ์
๊ทธ๋ ๋ค๋ฉด ์์คํ ์ฝ์ด๋ ๋ฌด์์ธ๊ฐ?
์์คํ ์ฝ(System Call)์ด๋ ์ด์ ์ฒด์ ์ ์์ฉ ํ๋ก๊ทธ๋จ ๊ฐ์ ์ธํฐํ์ด์ค ์ญํ ์ ํ๋ ํจ์ ํธ์ถ์ ๋งํ๋ค. ์์คํ ์ฝ์ ํตํด ํ๋ก๊ทธ๋จ์ ์ด์ ์ฒด์ ์ ์ปค๋์ ์ ๊ทผํ์ฌ ํ๋์จ์ด ์์์ ์ง์ ์ ๊ทผํ๊ฑฐ๋, ํ์ผ ์ ์ถ๋ ฅ, ํ๋ก์ธ์ค ์ ์ด ๋ฑ์ ์์ ์ ์ํํ ์ ์๋ค.*
์๋ฅผ ๋ค์ด, ์ฐ๋ฆฌ๊ฐ ์ง์ ๊ตฌํํ printf
ํจ์์์ ์ฌ์ฉํ๊ฒ๋ ย write
ํจ์๋ ์์คํ
์ฝ์ ์ผ์ข
์ผ๋ก, ์ปค๋์ ํตํด ์ถ๋ ฅ ์ฅ์น์ ๋ฐ์ดํฐ๋ฅผ ์ฐ๋ ์ญํ ์ ํ๋ค.
์์คํ
์ฝ ํจ์๋ ์ปค๋๊ณผ ํ๋์จ์ด์ ์ง์ ์ ๊ทผํ๋ค. ๋ฐ๋ผ์ ์์คํ
์ฝ์ ๋์์ C ์ธ์ด๋ก ์ง์ ์ค๊ณํ๊ณ ์์ฑํ ์๋ ์์ผ๋ฉฐ, ์ด์ ์ฒด์ ์ ์ปค๋๊ณผ ํต์ ํ๊ธฐ ์ํด ์ด์
๋ธ๋ฆฌ ์ธ์ด๋ก ๊ตฌํ๋๋ค. write
ํจ์๋ ๋ด๋ถ์ ์ผ๋ก ์ด์
๋ธ๋ฆฌ ์ฝ๋๋ก ์์ฑ๋์ด ์๊ณ ์ปค๋์ ์์ ์ ์์ฒญ์ ์ ๋ฌํ๋ค.
๊ทธ๋์ ๋ฌธ๋ ์ด๋ฐ ์๊ฐ์ด ๋ค์๋ค. ์ง์ง ์ ์์ค์ ๋ฐฉ์์ผ๋ก, ์ค์ง write
์ ๋ช๊ฐ์ง ์์คํ
์ฝ ํจ์๋ง ์ฌ์ฉํด ์ง์ printf๋ฅผ ๋ง๋ค์ด ๋ณด๋ฉด ์ด๋จ๊น? ์ด์ <stdio.h>
๊ฐ์ ๊ณ ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ด ์ ๋ง ๋งจ๋
๋ถํฐ printf๋ฅผ ๋ง๋ค์ด ๋ณด์!
ft_printf
์ ์ค๊ณ ๊ฐ์์ฐ์ , ft_printf.h
ํค๋ ํ์ผ์์๋ ํจ์๋ค์ ์ ์ํ๊ณ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํฌํจ์์ผฐ๋ค. ๋ํ, ํ์ํ ์ ํธ๋ฆฌํฐ ํจ์๋ค๋ ๋ชจ๋ ์ง์ ๊ตฌํํ์ฌ ํ๋ก์ ํธ์ ๋ชจ๋ ๋ถ๋ถ์ ์์ ํ ์ดํดํ๊ณ ํต์ ํ ์ ์๋๋ก ํ๋ค. ์ฐ๋ฆฌ์ ft_printf
๋ write
์์คํ
์ฝ์ ์ด์ฉํด ๋ฌธ์ ์ถ๋ ฅ์ ๊ตฌํํ๋ฉฐ, C ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ printf
์ ์ ์ฌํ ํํ๋ก ์๋ํ๋ค. ๋ํ, ๊ฐ๋ณ ์ธ์ ๋ฆฌ์คํธ๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํด stdarg.h
๋ฅผ ํฌํจํ์ฌ ๋ค์ํ ํ์
์ ์ธ์๋ฅผ ์ฒ๋ฆฌํ ์ ์๋๋ก ํ๋ค.
#ifndef FT_PRINTF_H
# define FT_PRINTF_H
# include <unistd.h>
# include <stdlib.h>
# include <stdarg.h>
int ft_printf(const char *format, ...);
...
#endif
ft_printf
์ ํต์ฌ์ ํฌ๋งทํ
๋ฌธ์์ด์ ์ํํ๋ฉด์, %
๋ฌธ์๋ฅผ ๋ง๋๋ฉด ํด๋น ํ์
์ ๋ฐ์ดํฐ๋ฅผ print_va
ํจ์๋ฅผ ํตํด ์ถ๋ ฅํ๋ ๊ฒ์ด๋ค. print_va
ํจ์๋ ์ธ์ ํ์
์ ๋ฐ๋ผ ์๋ง์ ์ถ๋ ฅ ํจ์๋ฅผ ํธ์ถํ๋ค.
%c
: ๋จ์ผ ๋ฌธ์ ์ถ๋ ฅ%s
: ๋ฌธ์์ด ์ถ๋ ฅ%d
, %i
: ์ ์ ์ถ๋ ฅ%u
: ๋ถํธ ์๋ ์ ์ ์ถ๋ ฅ%p
: ํฌ์ธํฐ ์ฃผ์ ์ถ๋ ฅ%x
, %X
: 16์ง์ ์ถ๋ ฅint ft_printf(const char *format, ...)
{
va_list ap;
int i = 0;
int len = 0;
int tmp;
va_start(ap, format);
while (format[i])
{
if (format[i] == '%')
{
tmp = print_va(format[++i], ap);
i++;
}
else
tmp = write(1, &format[i++], 1);
if (tmp == -1)
return (-1);
len += tmp;
}
va_end(ap);
return (len);
}
์ง์ ๊ตฌํํ ft_printf
๋ ํฌ๋งท ๋ฌธ์์ด์ ํด์ํด ์ถ๋ ฅํ ๊ฐ์ ๊ฒฐ์ ํ๊ณ , ๊ฐ ํ์
์ ๋ง๋ ์ถ๋ ฅ ํจ์๋ฅผ ํธ์ถํ์ฌ ํ๋ฉด์ ์ถ๋ ฅํ๋ค. ๋ํ, printf
์ฒ๋ผ ์ถ๋ ฅ๋ ๋ฌธ์์ ์๋ฅผ ๋ฐํํ๋ ๊ธฐ๋ฅ๋ ๊ตฌํํ์ฌ ํ์ค printf
์ ๋์ผํ ๋์์ ํ๋๋ก ํ๋ค.
๊ฐ ํ์
์ ๋ฐ๋ผ ์ถ๋ ฅํ๋ ํจ์๋ค์ ๋ชจ๋ print_va
ํจ์์์ ํธ์ถ๋๋ค. ๊ฐ ํ์
์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋์ง ๊ฐ๋ตํ ์ดํด๋ณด๊ฒ ๋ค.
print_c.c
)%c
๋ ๋จ์ผ ๋ฌธ์๋ฅผ ์ถ๋ ฅํ๋ค. va_arg
๋ฅผ ํตํด int
ํ์
์ ์ธ์๋ฅผ ๋ฐ์์ ์ถ๋ ฅํ๋ค.
int print_c(va_list ap)
{
unsigned char c;
c = va_arg(ap, int);
return (write(1, &c, 1));
}
print_d.c
)์ ์๋ฅผ ์ถ๋ ฅํ๊ธฐ ์ํด ft_ltoa
ํจ์๋ฅผ ์ด์ฉํด ์ซ์๋ฅผ ๋ฌธ์์ด๋ก ๋ณํํ ํ ์ถ๋ ฅํ๋ค. ft_ltoa
์ญ์ ์ง์ ๊ตฌํํ ํจ์๋ก, ์ ์๋ฅผ ๋ฌธ์์ด๋ก ๋ณํํ๋ ๋ก์ง์ ํฌํจํ๊ณ ์๋ค. ์์์ผ ๊ฒฝ์ฐ์๋ ๋ถํธ๋ฅผ ๋ถ์ด๋ ๋ฑ์ ์ฒ๋ฆฌ๊ฐ ํ์ํ๋ค.
int print_d(va_list ap)
{
char *nbr;
int size;
int tmp;
tmp = va_arg(ap, int);
nbr = ft_ltoa(tmp);
if (!nbr)
return (-1);
size = ft_strlen(nbr);
size = write(1, nbr, size);
free(nbr);
return (size);
}
print_p.c
)ํฌ์ธํฐ๋ 16์ง์๋ก ์ถ๋ ฅ๋๋ฉฐ, 0x
๋ก ์์ํ๋ ์ฃผ์ ํ์์ ๊ฐ์ง๋ค. ํฌ์ธํฐ ์ฃผ์๋ฅผ ๋ฐ์์ ์ด๋ฅผ 16์ง์ ๋ฌธ์์ด๋ก ๋ณํํ๊ณ ์ถ๋ ฅํ๋ค. ์ด ๊ณผ์ ์์๋ 16์ง์ ํฌ๊ธฐ๋ฅผ ๊ณ์ฐํ๋ ft_get_ulld_hex_size
ํจ์๋ฅผ ์ง์ ๊ตฌํํ์ฌ ์ฌ์ฉํ๋ค.
int print_p(va_list ap)
{
char hex[18];
unsigned long long address;
int i;
int size;
hex[0] = '0';
hex[1] = 'x';
address = (unsigned long long)va_arg(ap, char *);
size = ft_get_ulld_hex_size(address) + 2;
i = size - 1;
while (i >= 2)
{
hex[i--] = "0123456789abcdef"[address % 16];
address /= 16;
}
return (write(1, hex, size));
}
ํ๊ต ์ ๋ฐฐ๊ฐ ์ค์ ๋ก ์ด๋ก์ N์ฌ์ ์ต์ข ๋ฉด์ ์์ "์์คํ ์ฝ์ด ๋ฌด์์ธ์ง ์ค๋ช ํด๋ณด์ธ์."๋ผ๋ ์ง๋ฌธ์ ๋ฐ์๋ค๊ณ ํ๋ค. ์ด๋ ํด๋น ๊ธฐ์ ๋ฉด์ ๊ด ๋ํ CS ์ง์์ ๊ฐ์ถ ์ ์ ์ ์ํ๋ค๋ ๊ฒ์ด๋ค.
์ด ์ง๋ฌธ์ ๋ํด์
1. ์ ๋๋ก ๋ตํ์ง ๋ชปํ๋ ๊ฒ
2. ์ด์์ฒด์ ์์
์ง์์ ๋์ด์ ๊ฐ๋จํ ์ค๋ช
ํ๊ณ ๋์ด๊ฐ๋ ๊ฒ
3. ์์คํ
์ฝ์ ์์์ ์ด๋ฅผ ์ง์ ๊ณ ๋ฏผํด๋ณธ ๊ฒฝํ์ ๋๋๋ ๊ฒ!
์ด 3๊ฐ์ง๋ ๋ถ๋ช ํ ์ฐจ์ด๊ฐ ์๊ณ , ๋ถ๋ช ๋ฉด์ ๊ด์๊ฒ๋ ๋งค์ฐ ๋ค๋ฅธ ์ธ์์ ์ค ๊ฒ์ด๋ค!!
ps. ์ปด๊ณต์์ ์ํ๊ณต๋ถ ํ๋๋ผ ์ง์น ์ฐ๋ฆฌ ๋ชจ๋ ํ์ดํ !
์์คํ ์ฝ์ ๋ํด ์๋ ์ ๊ณต๋ถํด์ ๋ค ๊น๋จน์๋๋ฐ, ๋ฏผํค๋ ๋๋ถ์ ๋ณต์ต์ ํ๊ฒ ๋๋ค์!! ๊ฐ์ฌํฉ๋๋ค!!
์์ ๊ณต์ฃผ ๋ฏผํค๋ ์ ๋ณด๊ณ ๊ฐ๋๋ค
์์ผ๋ก๋ ์ฐ์ค ๊ธ ๊ธฐ๋ํ๊ฒ ์ต๋๋ค
์๋ ํ์ธ์ ์์ ๊ณต์ฃผ ๋ฏผํค๋! ๊ธ์ ์ ์ฑ์ด ๊ฐ๋ํ๊ณ , ์์ฃผ ๋ฉ์ ธ์ ๊ณต์ฃผ์ ๋ฉด๋ชจ๊ฐ ๋๋ณด์ ๋๋ค!
์ ๋ ๋ฆฌ๋ ์ค ์์ ์ ๋ค์ผ๋ฉด์ printํจ์์ ๊ถ๊ธ์ฆ์ ๊ฐ๊ณ ํ๊ณ ๋ค์ด๊ฐ๋ฉฐ ์ด๋ค ์์คํ ์ฝ์ด ์ฐ์๋์ง ๋ถ์ํด๋ณธ ๊ฒฝํ์ด ์๋๋ฐ์โฆ! ์ง์ ๋ง๋ค์ด๋ณด์ ๊ฒฝํ์ ๋ณด๊ณ cs์ง์์ด ๋ ํ๋ถํด์ง ๊ฒ ๊ฐ์ต๋๋ค~~
์์ผ๋ก๋ ํฌ์คํ ๊ธฐ๋ํ ๊ฒ์!