πŸ«πŸŽ’

[Cν”„λ‘œκ·Έλž˜λ°] 01. C μ–Έμ–΄μ˜ κ°œμš”

十月 2024. 4. 16. 18:54

πŸ• C μ–Έμ–΄μ˜ μ •μ˜, 역사, νŠΉμ§•

 

πŸ” C μ–Έμ–΄μ˜ μ •μ˜

⁕ C μ–Έμ–΄ : ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄

βœ“ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄
≫ μ‚¬λžŒκ³Ό 컴파일러(compiler)κ°€ μ΄ν•΄ν•˜λ„λ‘ μ•½μ†λœ ν˜•νƒœμ˜ μ–Έμ–΄
≫ 기계어, μ–΄μ…ˆλΈ”λ¦¬μ–΄, C, C++, C#, Java, PHP λ“±

μ»΄νŒŒμΌλŸ¬κ°€ λ²ˆμ—­

 

⁕ C μ–Έμ–΄λŠ” μ»΄νŒŒμΌλŸ¬κ°€ ν•„μš”

βœ“ 컴파일러
≫ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ‘œ μž‘μ„±λœ ν”„λ‘œκ·Έλž¨μ„ 컴퓨터가 μ΄ν•΄ν•˜λ„λ‘ κΈ°κ³„μ–΄λ‘œ λ²ˆμ—­ν•΄μ£ΌλŠ” λ²ˆμ—­κΈ°

• μ–΄μ…ˆλΈ”λŸ¬(assembler)
≫ 기호둜 ν‘œν˜„λœ μ–΄μ…ˆλΈ”λ¦¬ μ½”λ“œλ₯Ό κΈ°κ³„μ–΄λ‘œ λ²ˆμ—­ν•˜λŠ” λ²ˆμ—­κΈ°

• 인터프리터(interpreter)
≫ μ†ŒμŠ€ ν”„λ‘œκ·Έλž¨μ„ ν•œ λ²ˆμ— κΈ°κ³„μ–΄λ‘œ λ³€ν™˜μ‹œν‚€λŠ” μ»΄νŒŒμΌλŸ¬μ™€ 달리,
ν”„λ‘œκ·Έλž¨μ„ ν•œ 단계씩 κΈ°κ³„μ–΄λ‘œ 해석해 μ‹€ν–‰ν•˜λŠ” 'μ–Έμ–΄μ²˜λ¦¬ ν”„λ‘œκ·Έλž¨'
(즉, ν•œ 쀄씩 λ²ˆμ—­)

 

πŸ” C μ–Έμ–΄μ˜ 역사

 

πŸ” C μ–Έμ–΄μ˜ νŠΉμ§•

• ν”„λ‘œκ·Έλž¨ 이식성 λ†’μŒ

• κ°„λ‹¨ν•œ 문법 ν‘œν˜„μœΌλ‘œ 함좕적 ν”„λ‘œκ·Έλž¨ μž‘μ„±μ΄ 용이

• μ €κΈ‰μ–Έμ–΄ νŠΉμ„±μ„ κ°€μ§„ κ³ κΈ‰μ–Έμ–΄

• 논리적이며 ꡬ쑰적인 μ‹œμŠ€ν…œ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄

• ν•˜λ“œμ›¨μ–΄ μ œμ–΄κ°€ κ°€λŠ₯ (기계어, μ–΄μ…ˆλΈ”λ¦¬μ–΄λŠ” 기계 μΉœν™”μ )


πŸ• C ν”„λ‘œκ·Έλž¨μ˜ μž‘μ„± 및 μ€€λΉ„

 

πŸ” ν”„λ‘œκ·Έλž¨ 개발 단계

 

⁕ 에디터(editor)와 컴파일러 ν•„μš”

에디터
: μ†ŒμŠ€ μ½”λ“œλ₯Ό μž‘μ„±ν•΄ μ €μž₯ν•  수 μžˆλ„λ‘ λ„μ™€μ£ΌλŠ” 도ꡬ

C 컴파일러
: Turbo C/C++, Dev-C++, Visual C++, GCC λ“±

 

πŸ” C ν”„λ‘œκ·Έλž¨ μ™„μ„± κ³Όμ •

μ½”λ”© ⇨ 컴파일 ⇨ 링킹

μ½”λ”© 단계
β‡’ μ†ŒμŠ€ μ½”λ“œλ₯Ό μž‘μ„±ν•˜μ—¬ μ†ŒμŠ€ 파일(source file)을 μƒμ„±ν•˜λŠ” κ³Όμ • ( *.c / *.cpp )

컴파일 단계
β‡’ μ†ŒμŠ€ 파일이 λͺ©μ  파일(object file)둜 λ³€ν™˜λ˜λŠ” κ³Όμ • ( *.obj )
(λͺ©μ  νŒŒμΌμ€ μ‹€ν–‰ 파일 이전 단계)

링킹 단계
β‡’ λͺ©μ  νŒŒμΌμ„ μ‹€ν–‰ 파일(execution file)둜 λ³€ν™˜ν•˜λŠ” κ³Όμ •

 

 

βœ“ μ†ŒμŠ€ 파일의 생성

β‡’ 였늘 λ‚  μ“°λŠ” C 컴파일러λ₯Ό μ‚¬μš©ν•΄μ•Ό 함 (C, C++ 톡합)
β‡’ ν™•μž₯μžκ°€ 무엇이냐에 따라 그에 λ§žλŠ” μ»΄νŒŒμΌλŸ¬κ°€ ꡬ동

C λŠ” .c
C++ 은 .cpp

⁕ μΆ”κ°€ 지식
β‡’ C++ 의 ++λŠ” pythonμ—λŠ” μ—†λŠ” 객체지ν–₯이 좔가됨을 의미
β‡’ pythonμ—λŠ” 증감 μ—°μ‚°μž ++ κ°€ μ—†κ³  i = i + 1 둜 써야 ν•œλ‹€

βœ“ μ†ŒμŠ€ 파일의 컴파일

β‡’ κΈ°κ³„μ–΄λ‘œ 된 λͺ©μ  파일둜 컴파일 됨

 

βœ“ μ‹€ν–‰ 파일의 생성 (링킹 κ³Όμ •)

β‡’ μ†ŒμŠ€ 파일 만으둜 λ§Œλ“  λͺ©μ  νŒŒμΌμ€ λ°”λ‘œ μ‹€ν–‰ 파일이 될 수 μ—†μœΌλ©°,
λ‹€λ₯Έ λͺ©μ  파일과 라이브러리 파일이 μ—°κ²°λ˜μ–΄μ•Ό 링컀가 μ‹€ν–‰ νŒŒμΌμ„ λ§Œλ“¦
β‡’ μ‹€μ œλ‘œλŠ” 컴파일/링킹 과정이 컴파일러λ₯Ό 톡해 ν•œκΊΌλ²ˆμ— μ΄λ£¨μ–΄μ§€μ§€λ§Œ,
μ΄λ‘ μ μœΌλ‘œλŠ” λ‚΄λΆ€μ—μ„œ μ‹€μ œ 링킹 과정을 거쳐 μ‹€ν–‰ 파일이 λ§Œλ“€μ–΄μ§„λ‹€.

β™ͺ 링컀(linker) : μ—¬λŸ¬ λͺ©μ  파일과 라이브러리 νŒŒμΌμ„ μ—°κ²°ν•΄μ£ΌλŠ” 도ꡬ

 


 

πŸ‘©πŸ»‍πŸ’» Visual Studio 컴파일러 μ‚¬μš©ν•΄λ³΄κΈ°

• μƒˆ ν”„λ‘œμ νŠΈ λ§Œλ“€κΈ°

β‡’ Windows λ°μŠ€ν¬ν†± λ§ˆλ²•μ‚¬ 선택 ν›„ λ‹€μŒ

• μƒˆ ν”„λ‘œμ νŠΈ ꡬ성

β‡’ ν”„λ‘œμ νŠΈ 이름, μœ„μΉ˜ μ§€μ • ν›„ λ§Œλ“€κΈ°
β‡’ (선택사항) μ†”λ£¨μ…˜ 및 ν”„λ‘œμ νŠΈλ₯Ό 같은 디렉터리에 λ°°μΉ˜ν•˜λ„λ‘ 체크

• μΆ”κ°€ μ˜΅μ…˜μ˜ 빈 ν”„λ‘œμ νŠΈ 체크 ν›„ 확인


• 빈 ν”„λ‘œμ νŠΈ 열리면 μ†ŒμŠ€νŒŒμΌ 생성

β‡’ μ†ŒμŠ€ 파일 였λ₯Έμͺ½ 마우슀 - μΆ”κ°€ - μƒˆν•­λͺ©
β‡’ μ†ŒμŠ€ 파일의 ν™•μž₯자λ₯Ό .c둜 μ§€μ •

μ†”λ£¨μ…˜ λΉŒλ“œ

β‡’ μ•„λž˜ 좜λ ₯ νƒ­μ—μ„œ μ†”λ£¨μ…˜ λΉŒλ“œλ‘œ μ»΄νŒŒμΌν•œ κ²°κ³Ό 확인 κ°€λŠ₯

μ‹€ν–‰νŒŒμΌ μ‹€ν–‰

β‡’ 디버그 - λ””λ²„κ·Έν•˜μ§€ μ•Šκ³  μ‹œμž‘


πŸ• C ν”„λ‘œκ·Έλž¨μ˜ ꡬ성

 

πŸ” C ν”„λ‘œκ·Έλž¨μ˜ κΈ°λ³Έ ꡬ쑰

β‡’ 맨 λ°‘(νšŒμƒ‰)의 μ‚¬μš©μž μ •μ˜ ν•¨μˆ˜λŠ” λ„μž…λΆ€μ™€ main() 사이에 μœ„μΉ˜ν•  μˆ˜λ„ μžˆλ‹€.

 

• C ν”„λ‘œκ·Έλž¨μ€ λ°˜λ“œμ‹œ ν•˜λ‚˜ μ΄μƒμ˜ ν•¨μˆ˜λ₯Ό 포함 ≫ main() ν•¨μˆ˜ λ°˜λ“œμ‹œ 쑴재

• ν•¨μˆ˜ μ‹œμž‘κ³Ό 끝 μ€‘κ΄„ν˜Έ { } μ‚¬μš©

• μ€‘κ΄„ν˜Έ μ•ˆμ—λŠ” λ³€μˆ˜μ„ μ–Έλ¬Έ, μΉ˜ν™˜λ¬Έ, μ—°μ‚°λ¬Έ, ν•¨μˆ˜ λ“± λͺ…λ Ή κΈ°μž…

• μ„ ν–‰μ²˜λ¦¬κΈ°(preprocessor)λ₯Ό μ œμ™Έν•œ λ¬Έμž₯의 λμ—λŠ” μ„Έλ―Έμ½œλ‘  ( ; ) λΆ™μž„

 

πŸ” C ν”„λ‘œκ·Έλž¨μ˜ ꡬ성 μš”μ†Œ

⁕ μ˜ˆμ•½μ–΄ (reserved word)


⁕ λͺ…μΉ­ (identifier)

λͺ…칭을 λ§Œλ“€ λ•Œ κ·œμΉ™


⁕ μ‚¬μš©μž μ •μ˜ λͺ…μΉ­μ˜ 예


⁕ μƒμˆ˜ (constant)

수치 μƒμˆ˜, 문자 μƒμˆ˜, λ¬Έμžμ—΄ 상


⁕ μ—°μ‚°μž (operator)

각쒅 μ—°μ‚° μˆ˜ν–‰
≫ λ‹€λ₯Έ 언어에 λΉ„ν•΄ λ§Žμ€ μ—°μ‚°μž


⁕ μ„€λͺ…λ¬Έ (주석)

β‡’ pythonμ—μ„œλŠ” ν•œ 쀄 주석 #, μ—¬λŸ¬ 쀄 주석은 ''' ~ '''


πŸ• μ—λŸ¬μ™€ κ²½κ³ 

 

πŸ” μ—λŸ¬ (error)

β‡’ μ—λŸ¬λŠ” λ°˜λ“œμ‹œ μˆ˜μ •ν•΄μ•Όλ§Œ μ‹€ν–‰ 파일 μ‹€ν–‰ κ°€λŠ₯

 

πŸ” κ²½κ³  (warning)