TIL_21.01.25 πŸƒπŸ½β€β™‚οΈπŸƒπŸ½β€β™‚οΈ

Doum KimΒ·2021λ…„ 1μ›” 25일
0

TIL

λͺ©λ‘ 보기
67/71
post-thumbnail

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둜 λ°”κΏ”μ£ΌλŠ” μž‘μ—…μ΄λ‹€.

ν”„λ‘œκ·Έλž¨μ΄ μ—¬λŸ¬κ°œμ˜ 파일둜 이루어져 μžˆμ–΄ ν•˜λ‚˜μ˜ 였브젝트 파일둜 ν•©μ³μ•Όν•œλ‹€λ©΄ λ§ν¬λΌλŠ” 단계λ₯Ό μΆ”κ°€ν•œλ‹€.

디버깅

λ²„κ·ΈλŠ” μ½”λ“œμ— λ“€μ–΄μžˆλŠ” 였λ₯˜μ΄λ‹€. λ”°λΌμ„œ 버그λ₯Ό μž‘λŠ” 디버깅 과정은 ν•„μˆ˜μ μ΄λ‹€. λ””λ²„κ±°λŠ” 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 으둜 μ‹€ν–‰ν•˜λ©΄ 였λ₯Έμͺ½ νŒ¨λ„μ΄ λ‚˜μ˜€κ³  디버거λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.

0개의 λŒ“κΈ€