πŸ› οΈBackend/βš™οΈC

[Cμ–Έμ–΄] C μ–Έμ–΄μ˜ κ°œμš”

junbin2 2025. 8. 18. 02:09

βœ… 1. C μ–Έμ–΄μ˜ λ“±μž₯κ³Ό λ°œμ „

(1) 컴퓨터 ν”„λ‘œκ·Έλž˜λ°κ³Ό ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄

[ ν”„λ‘œκ·Έλž˜λ°μ΄λž€? ]

  • 컴퓨터가 μž‘μ—…μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ μ‹€ν–‰ν•΄μ•Ό ν•˜λŠ” 일련의 λͺ…령을 μž‘μ„±ν•˜λŠ” 것

[ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ ]

  • ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” μ–Έμ–΄

(2) C μ–Έμ–΄μ˜ 탄생

  • 1972λ…„ Bell μ—°κ΅¬μ†Œμ˜ Denis Ritchieκ°€ μ‹œμŠ€ν…œ ν”„λ‘œκ·Έλž˜λ°μ„ μœ„ν•œ λͺ©μ μœΌλ‘œ κ°œλ°œν•œ ν”„λ‘œκ·Έλž˜λ° 언어이닀.
  • 컴퓨터 κΈ°μ’…κ°„ ν˜Έν™˜μ„±μ΄ 높은 κ³ κΈ‰ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄
  • ν•˜λ“œμ›¨μ–΄ μˆ˜μ€€μ˜ μ œμ–΄μ™€ λΉ λ₯Έ 싀행이 κ°€λŠ₯ν•œ ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€ 수 μžˆλŠ” μ–Έμ–΄
  • PDP-7 μ»΄ν“¨ν„°μ—μ„œ μ–΄μ…ˆλΈ”λ¦¬μ–΄λ‘œ κ΅¬ν˜„ν•œ Unix 컀널을 Cμ–Έμ–΄λ‘œ μž¬μž‘μ„± 즉, C둜 λ°”κΏ”μ„œ μ‰½κ²Œ λ³΄μ΄κ²Œν•¨.
  • λ‹€μ–‘ν•œ 컴퓨터에 Unix 운영체제λ₯Ό 이식할 수 있게 됨 ( ν˜„λŒ€μ˜ μš΄μ˜μ²΄μ œλ“€μ€ λŒ€λΆ€λΆ„ Unix 기반으둜 λ§Œλ“€μ–΄μ Έ 있음. )

(3) C μ–Έμ–΄μ˜ νŠΉμ§•

[ λ²”μš© κ³ κΈ‰μ–Έμ–΄ ]

  • 논리적인 처리 ꡬ쑰λ₯Ό λ§Œλ“€ 수 μžˆλŠ” 데이터 ν‘œν˜„ 및 νλ¦„μ œμ–΄λ₯Ό ν•  수 있음.
  • μ—¬λŸ¬ κ°€μ§€ μœ μš©ν•œ 처리λ₯Ό μœ„ν•œ ν‘œμ€€ 라이브러리λ₯Ό μ œκ³΅ν•¨
  • ν”„λ‘œκ·Έλž¨μ˜ 이식성이 λ†’μŒ

[ μ‹œμŠ€ν…œ ν”„λ‘œκ·Έλž˜λ°μ— μ μž‘ν•œ μ–Έμ–΄ ]

  • 운영체제, μž₯μΉ˜κ΄€λ¦¬μž, μœ ν‹Έλ¦¬ν‹° λ“±μ„ λ§Œλ“œλŠ” κ²ƒμ„ μ‹œμŠ€ν…œ ν”„λ‘œκ·Έλž˜λ°μ΄λΌκ³  ν•œλ‹€.
  • 이 처럼 μ €κΈ‰μ–Έμ–΄ μˆ˜μ€€μ˜ νŠΉμ„±μ΄ 있으며, ν•˜λ“œμ›¨μ–΄ μ œμ–΄μ— μ ν•©ν•˜λ©°, 맀우 λΉ λ₯Έ μ‹€ν–‰ 속도λ₯Ό κ°€μ§€κ³  있음.

[ κ°„κ²°ν•œ 문법 ꡬ쑰둜 λ˜μ–΄ 있음 ]

  • 문법 ꡬ쑰가 κ³ κΈ‰μ–Έμ–΄ μˆ˜μ€€μœΌλ‘œ λ˜μ–΄μžˆμ–΄, μ΄ν•΄ν•˜κΈ° 쉬움

βœ… 2. C ν”„λ‘œκ·Έλž¨μ˜ μž‘μ„±

(1) ν”„λ‘œκ·Έλž¨ 개발 단계

(2) C ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ 파일둜 λ§Œλ“œλŠ” κ³Όμ •

[ 1. μ½”λ”© ]

  • C μ–Έμ–΄μ˜ 문법에 맞게 코딩을 ν•˜λŠ” 과정이며, 이 과정을 톡해 C ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€ 수 μžˆλ‹€. ( .c ν™•μž₯자 )

[ 2. 컴파일 ]

  • λͺ©μ νŒŒμΌ(.obj) λ³€ν™˜ 과정이며, 이 과정을 컴파일이라고 ν•œλ‹€.
  • λͺ©μ νŒŒμΌ: 기계가 이해 ν•  수 μžˆλŠ” 기계 ν˜•νƒœμ˜ μ½”λ“œλ₯Ό μ˜λ―Έν•œλ‹€. ( .obj ν™•μž₯자 )

[ 3. 링크 ]

  • λͺ©μ νŒŒμΌλ“€μ„ λ¬Άμ–΄μ„œ ν•˜λ‚˜μ˜ μ‹€ν–‰νλ¦„μœΌλ‘œ λ§Œλ“œλŠ” 과정이 링크 κ³Όμ •μž„.
  • 컴파일 된 λͺ©μ νŒŒμΌ, 라이브러리 등을 λ¬Άμ–΄μ„œ μ‹€ν–‰ ν•  수 μžˆλŠ” μ½”λ“œμ˜ ν˜•νƒœλ‘œ λ§Œλ“€μ–΄μ€Œ ( .exe ν™•μž₯자 )

[ 정리 ]

  • 보톡은 이 과정듀은 IDE λ₯Ό 톡해 ν•œ λ²ˆμ— 이뀄짐. ν•˜μ§€λ§Œ, 각각의 λ™μž‘μ€ λ‚΄λΆ€μ μœΌλ‘œ 뢄리가 λ˜μ–΄μžˆμŒ.
  • 컴파일과 링크 과정은 ν•©μ³μ„œ λΉŒλ“œκ³Όμ •μ΄λΌκ³  뢀름
  • C ν”„λ‘œκ·Έλž¨ 개발 및 μ‹€ν–‰μ—λŠ” μ†ŒμŠ€ μ½”λ“œ νŽΈμ§‘κΈ°, 컴파일러, 링컀, 디버깅 도ꡬ가 ν•„μš”ν•¨. ( ν†΅ν•©κ°œλ°œν™˜κ²½ - IDE 라고 뢀름 )

βœ… 3. C ν”„λ‘œκ·Έλž¨μ˜ ꡬ성

(1) C ν”„λ‘œκ·Έλž¨μ˜ κΈ°λ³Έ ꡬ쑰

[ C ν”„λ‘œκ·Έλž¨ μž‘μ„±μ‹œμ˜ 일반적인 κ·œμΉ™ ]

  • λ°˜λ“œμ‹œ ν•˜λ‚˜ μ΄μƒμ˜ ν•¨μˆ˜λ₯Ό 포함해야 ν•œλ‹€.
  • main() ν•¨μˆ˜κ°€ λ°˜λ“œμ‹œ μ‘΄μž¬ν•΄μ•Ό ν•œλ‹€.
  • ν•¨μˆ˜μ˜ λͺΈμ²΄λŠ” μ‹œμž‘κ³Ό 끝을 μ•Œλ¦¬λŠ” μ€‘κ΄„ν˜Έ {}λ₯Ό μ‚¬μš©ν•˜μ—¬ λΈ”λ‘μœΌλ‘œ κ΅¬μ„±ν•œλ‹€.
  • 블둝 μ•ˆμ—λŠ” λ³€μˆ˜ μ„ μ–Έλ¬Έ, μΉ˜ν™˜, μ—°μ‚°, ν•¨μˆ˜ν˜ΈμΆœ λ“±μ˜ λͺ…령을 κΈ°μž…ν•œλ‹€.
  • μ„ ν–‰μ²˜λ¦¬ μ§€μ‹œμ–΄(perprocessiong directives)λ₯Ό μ œμ™Έν•œ λ¬Έμž₯의 λμ—λŠ” μ„Έλ―Έμ½œλ‘ (;)을 뢙인닀.
  • μ„ ν–‰μ²˜λ¦¬ μ§€μ‹œμ–΄: C ν”„λ‘œκ·Έλž¨ 컴파일 μ „μ²˜λ¦¬λ˜λŠ” λͺ…λ Ήμ–΄λ₯Ό μ˜λ―Έν•¨.

(2) C ν”„λ‘œκ·Έλž¨μ˜ ꡬ성 μš”μ†Œ

[ C ν”„λ‘œκ·Έλž¨μ„ κ΅¬μ„±ν•˜λŠ” ν† ν°μ˜ μ’…λ₯˜ ]

  • μ˜ˆμ•½μ–΄(ν‚€μ›Œλ“œ): Cμ—μ„œ κ³ μœ ν•œ 문법 및 μ˜λ―Έκ°€ μ •ν•΄μ§„ 단어 ( char, int, auth, volatile, for, if λ“± )
  • λͺ…μΉ­: λ³€μˆ˜, ν•¨μˆ˜ 등을 μ‹λ³„ν•˜κΈ° μœ„ν•΄ μ •μ˜ν•˜λŠ” 이름 ( λ³€μˆ˜λͺ…, ν•¨μˆ˜λͺ… λ“± )
  • μƒμˆ˜: 값이 λ³€ν•˜μ§€ μ•ŠλŠ” 자료 (μ •μˆ˜, μ‹€μˆ˜, 문자 λ“±)
  • λ¬Έμžμ—΄: ν°λ”°μ˜΄ν‘œλ‘œ 묢인 문자 μ‹œν€€μŠ€
  • ꡬ두점: κ³ μœ ν•œ 문법 및 μ˜λ―Έκ°€ μ •ν•΄μ§„ 기호
  • μ„€λͺ…λ¬Έ: ν”„λ‘œκ·Έλž¨μ— λŒ€ν•œ 주석 ex - /* */ , // ( μ»΄νŒŒμΌλŸ¬λŠ” μ„€λͺ…λ¬Έμ˜ μ˜μ—­μ€ λ¬΄μ‹œν•¨ )

βœ… 4. μ—λŸ¬μ™€ κ²½κ³ 

(1) μ—λŸ¬

  • ν”„λ‘œκ·Έλž¨μ„ μ •μƒμ μœΌλ‘œ λΉŒλ“œν•  수 μ—†λŠ” λ¬Έμ œκ°€ ν¬ν•¨λœ μ†ŒμŠ€ μ½”λ“œμ˜ 경우 μ—λŸ¬λ©”μ‹œμ§€λ₯Ό 좜λ ₯함
  • Cμ–Έμ–΄μ˜ 문법에 λ§žμ§€ μ•ŠλŠ” ν˜•μ‹μ˜ λ¬Έμž₯을 μ‚¬μš©ν•œ 경우
  • λ°˜λ“œμ‹œ ν•„μš”ν•œ μš”μ†Œκ°€ λˆ„λ½λœ 경우
  • μ—λŸ¬ λ°œμƒμ‹œ λΉŒλ“œκ°€ μ€‘μ§€λ˜μ–΄ λͺ©μ  μ½”λ“œ 및 μ‹€ν–‰ 파일이 μƒμ„±λ˜μ§€ μ•ŠμŒ
  • μ—λŸ¬ λ©”μ‹œμ§€λ₯Ό ν™•μΈν•˜μ—¬ λ°˜λ“œμ‹œ μˆ˜μ •ν•΄μ•Ό 함

(2) κ²½κ³ 

  • λΉŒλ“œλ₯Ό μ§„ν–‰ν•  μˆ˜λŠ” μžˆμ§€λ§Œ, 문제 λ°œμƒ κ°€λŠ₯성이 μžˆλŠ” μ†ŒμŠ€ μ½”λ“œλ₯Ό μž‘μ„±ν•œ κ²½μš°μ΄λ‹€.
  • μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” λ³€μˆ˜λ‚˜ ν•¨μˆ˜λ₯Ό μ •μ˜ν•œ 경우
  • μ˜€μ°¨κ°€ λ°œμƒν•  수 μžˆλŠ” λ¬Έμž₯ λ“±
  • κ²½κ³ κ°€ μžˆλ”λΌλ„ μ‹€ν–‰ νŒŒμΌμ€ μƒμ„±λ˜λ©°, ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•  수 있음
  • κ²½κ³  λ©”μ‹œμ§€λ₯Ό λ‚΄μš©μ„ νŒŒμ•…ν•˜μ—¬ ν•„μš”ν•œ κ²½μš°μ—λŠ” 적절히 μˆ˜μ •ν•˜λ©°, μ•„λ¬΄λŸ° λ¬Έμ œκ°€ μ—†λŠ” κ²½κ³ λŠ” λ¬΄μ‹œν•  수 있음