TIL_21.01.25 ๐Ÿƒ๐Ÿฝโ€โ™‚๏ธ๐Ÿƒ๐Ÿฝโ€โ™‚๏ธ

2964 ๋‹จ์–ด TILTIL

cs50

์ปดํŒŒ์ผ๋ง

#include <stdio.h>

int main(void)
{
  print("hello, world\n");
}

printf ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” stdio.h ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
c์–ธ์–ด๋กœ ์ž‘์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ ํŒŒ์ผ๋ช…์ด .h๋กœ ๋๋‚˜๋Š” ํŒŒ์ผ์ด๋‹ค.
์—ฌ๊ธฐ์—๋Š” printf ํ•จ์ˆ˜์˜ ํ”„๋กœํ† ํƒ€์ž…์ด ์žˆ์–ด clang ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ปดํŒŒ์ผํ•  ๋•Œ ๋ฌด์—‡์ธ์ง€ ์•Œ๋ ค์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

make๋‚˜ clang์„ ์‚ฌ์šฉํ•ด์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ๋•Œ ๋„ค ๊ฐœ์˜ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์นœ๋‹ค.

  1. ์ „์ฒ˜๋ฆฌ
  2. ์ปดํŒŒ์ผ๋ง
  3. ์–ด์…ˆ๋ธ”๋ง
  4. ๋งํ‚น

์ „์ฒ˜๋ฆฌ(Precompile)

์ปดํŒŒ์ผ ๊ณผ์ •์˜ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„์ด๋ฉฐ ์ „์ฒ˜๋ฆฌ๊ธฐ์— ์˜ํ•ด ์ˆ˜ํ–‰๋œ๋‹ค.
#์œผ๋กœ ์‹œ์ž‘๋˜๋Š” C ์†Œ์Šค ์ฝ”๋“œ๋Š” ์ „์ฒ˜๋ฆฌ๊ธฐ์—๊ฒŒ ์‹ค์งˆ์ ์ธ ์ปดํŒŒ์ผ์ด ์ด๋ฃจ์–ด์ง€๊ธฐ ์ „์— ๋ฌด์–ธ๊ฐ€๋ฅผ ์‹คํ–‰ํ•˜๋ผ๊ณ  ์•Œ๋ ค์ค€๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด #include๋Š” ์ „์ฒ˜๋ฆฌ๊ธฐ์—๊ฒŒ ๋‹ค๋ฅธ ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ํฌํ•จ์‹œํ‚ค๋ผ๊ณ  ์•Œ๋ ค์ค€๋‹ค.

์ปดํŒŒ์ผ(Compile)

์ „์ฒ˜๋ฆฌ๊ธฐ๊ฐ€ ์ „์ฒ˜๋ฆฌํ•œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ปดํŒŒ์ผ์ด ์ด๋ฃจ์–ด์ง„๋‹ค.
์ปดํŒŒ์ผ๋Ÿฌ๋Š” C ์ฝ”๋“œ๋ฅผ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋ผ๋Š” ์ €์ˆ˜์ค€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์ปดํŒŒ์ผํ•œ๋‹ค.
์ปดํ“จํ„ฐ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด์™€ ์ตœ๋Œ€ํ•œ ๊ฐ€๊นŒ์šด ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ณผ์ •์ด๋‹ค.

์–ด์…ˆ๋ธ”(Assemble)

์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผ๋˜๋ฉด ๊ทธ ํ›„์— ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ๋ฅผ ์˜ค๋ธŒ์ ํŠธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค. CPU๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์„ ์–ด๋–ป๊ฒŒ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด ํ˜•ํƒœ์ธ ์—ฐ์†๋˜ 0๊ณผ 1๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ์ž‘์—…์ด๋‹ค.

๋งํฌ(Link)

ํ”„๋กœ๊ทธ๋žจ์ด ์—ฌ๋Ÿฌ๊ฐœ์˜ ํŒŒ์ผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์–ด ํ•˜๋‚˜์˜ ์˜ค๋ธŒ์ ํŠธ ํŒŒ์ผ๋กœ ํ•ฉ์ณ์•ผํ•œ๋‹ค๋ฉด ๋งํฌ๋ผ๋Š” ๋‹จ๊ณ„๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

๋””๋ฒ„๊น…

๋ฒ„๊ทธ๋Š” ์ฝ”๋“œ์— ๋“ค์–ด์žˆ๋Š” ์˜ค๋ฅ˜์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋ฒ„๊ทธ๋ฅผ ์žก๋Š” ๋””๋ฒ„๊น… ๊ณผ์ •์€ ํ•„์ˆ˜์ ์ด๋‹ค. ๋””๋ฒ„๊ฑฐ๋Š” breakpoint๋ฅผ ์ด์šฉํ•ด ํŠน์ • ํ–‰์—์„œ ํ”„๋กœ๊ทธ๋žจ์„ ๋ฉˆ์ถœ ์ˆ˜ ์žˆ๋‹ค.

cs50์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ help50์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ปดํŒŒ์ผ์‹œ ์ƒ๊ธฐ๋Š” ์˜ค๋ฅ˜๋ฅผ ํ•ด์„ํ•ด์ค€๋‹ค.

int main(void)
{
  printf("hello, world\n");
}

//โ€œimplicitly declaring library function 'printf'โ€ 

help50 make filename

ํ•˜์ง€๋งŒ ๋…ผ๋ฆฌ์  ์˜ค๋ฅ˜์˜ ์›์ธ์„ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ๋Š” help50์˜ ๋„์›€์„ ๋ฐ›์„ ์ˆ˜๋Š” ์—†๋‹ค.

๋”ฐ๋ผ์„œ ๋ฐฉ๋ฒ•์€ 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

  1. printf
    ์ผ์ผ์ด ๊ฐ’์„ ์ถœ๋ ฅํ•˜์—ฌ ์—๋Ÿฌ์˜ ์›์ธ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ชจ๋“  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜๋Š” ์—†๋‹ค.

  2. debug50
    CS50 IDE๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด debug50์ด๋ผ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

debug50 filename ์œผ๋กœ ์‹คํ–‰ํ•˜๋ฉด ์˜ค๋ฅธ์ชฝ ํŒจ๋„์ด ๋‚˜์˜ค๊ณ  ๋””๋ฒ„๊ฑฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ