Language Study/C

[C/C++] 01 - C언어 소개와 컴파일의 이해 (1)

지미닝 2022. 10. 1. 23:47

Index


  1. 프로그래밍 언어 분류
  2. C 언어 소개
  3. Compiled Language vs. Interpreted language
  4. C 언어 컴파일과 Python 언어 인터프리트 비교하기
  5. Von Neumann Architecture

1. 프로그래밍 언어와 분류

프로그래밍 언어는 프로그램을 작성하기 위한 언어이다.

  • 사람이 컴퓨터에게 시키고 싶은 내용을 표현하기 위한 표기법
  • 인간 친화적 수준에 따라 기계어/어셈블리어/고급 언어로 분류한다.

기계어

  • 이진수 코드로 CPU마다 고유의 기계어 ->ISA

어셈블리어

  • 기계어 이진수코드 ->기계화 코드로 대치
  • Symbolic Machine Code로도 불림

고급언어

  • 영어와 비슷한 구문이며 사람이 읽고 쓰기 쉬움
  • 기계어에 독립적임 -> 기계의 세부사항(ISA)을 알지 못해도 프로그램 작성 가능
  • C/C++, Python, Java등이 고급 언어의 예
  • 반대로 어셈블리어나 기계언어를 저급언어(Low-Level Language)라고 함

기계어/어셈블리어/고급언어

프로그래머는 고급 언어로 프로그램의 소스 코드를 작성 -> 컴파일(Compiling) -> 기계가 해독해서 이진실행파일(Binary Executable)로 변환

이진실행파일 형태의 프로그램을 운영체제를 이용하여 적재하고 실행한다.


기계어와 이식성

①Portability(이식성)

  • 프로그램을 다른 기계/플랫폼에서 활용하기 위해 필요한 수정이나 변경의 수준
  • High Portability : 수정, 변경이 거의 없이 프로그램을 사용할 수 있는 것

②기계어로 작성된 프로그램은 이식성이 매우 낮음

  • CPU마다 다른 기계어(ISA)를 사용하기 때문

③고급 언어의 경우 상대적으로 이식성이 높음

  • 단 다른 CPU/ISA에서 사용하기 위해서는 소스 코드를 다시 컴파일하여 해당 CPU/ISA에 적합한 이진실행파일을 생성하여야 함

2. C 언어 소개

Dennis Ritchie와 Ken Thompson이 개발하였다.

  • 당시 UNIX운영체제 개발에 사용되었다.
  • 미국 및 국제 표준으로 제정되었다. (American National Standard Insitute)

C 언어의 특징

고급 언어의 특성과 저급언어의 강점을 겸비하였다.

 

①구조화 프로그래밍 지원 

복잡한 문제를 잘 정의된 작은 함수로 나누어 구성, 해결 가능. 블록(Block), 함수(Sub-Routine) 등의 개념을 통해 프로그램 소스 코드의 구조를 이해하기 쉽게 작성하고 읽을 수 있음

 

②이식성 (Portability)

다양한 컴퓨터 플랫폼에서 사용할 수 있다

어셈블리어나 기계어에 비교할 때 큰 장점

 

③효율성 (Efficiency)

적은 메모리를 이용하여 빠르게 수행 가능한 프로그램을 작성할 수 있음

 

④다양한 연산자

프로그램을 간결하고 쉽게 작성할 수 있음

 

⑤동적 메모리 (Dynamic Memory) 관리

동적인 메모리 할당과 해제를 통해 임베디드 시스템과 같이 메모리 자원이 제한된 환경에서도 구동할 수 있는 프로그램을 작성할 수 있음


3. Compiled Language vs. Interpreted language

실행/목적 파일의 생성 여부가 중요한 차이이다.

  • Compiled Language전체 소스 코드를 이진 기계어 코드로 번역 ->  다 묶어서 이진 실행 파일 생성
  • Interpreted Language소스 코드의 일부 (한 문장씩) 기계어 코드로 번역 -> 바로 실행 (이진 실행 파일 생성X)
  • Compiled Language의 경우 실행/목적 파일이 있으면 소스코드와 Compiler가 없어도 실행 가능하지만 Interpreted Language의 경우 실행을 위해 소스코드와 Interpreter가 필요
    • 참고) Python 소스를 interpretation 하지 않고 compile을 통해 실행 파일을 만들 수도 있다.