본문 바로가기
프로그래밍_개발/C

C언어 개인노트#001

by Raffin 2020. 5. 7.
반응형
SMALL

1.1 C언어는?

컴퓨터와 인간사이의 의사소통을 위한 프로그래밍 언어다.

 

C언어에 객체지향 특성을 반영한 언어가 C++, C++에 웹프로그램에 적합하도록 개발된 언어가 자바(JAVA)다.

마이크로소프트사의 닷넷 플랫폼 기반의 언어인 C#은 자바 언어에 기반을 두고 발전시킨 언어다.

 

C → C++ → JAVA →C#

 

 

C언어는 1972년 미국의 AT&T 사의 벨(Bell) 연구소의 연구원들인 데니스 리치와 켄 톰슨에 의해서 만들어졌다.

이유는 UNIX 운영체제를 만들기 위해서였다.

 

초기 UNIX는 특정 시스템에 종속적인 어셈블리 언어로 작성되었다. 같은 기능을 하는 시스템 프로그램을 다른 컴퓨터 기종에서는 사용할 수 없는 문제가 있었기 때문에 켄 톰슨이 1970년에 B언를 개발해 일부분 기존의 어셈블리어와 함께 사용했으며 B언어의 성능개선을 위해 데니스 리치가 1972년에 C언어를 개발했다.

C 언어를 개발 한 후에 어셈블리어로 작성되었던 초기 UNIX 운영체제는 상당 부분 C언어로 다시 작성되었다.

 

현재까지도 C 언어는 운영체제 또는 운영체제 기반의 응용 프로그램을 개발할 때 사용하는 효율성이 높은 프로그래밍 언어이며, 임베디드 시스템 소프트웨어 분야, 모바일 분야, 자율 컴퓨팅 분야 등의 선도적인 분야에서도 매우 폭넓게 사용되고 있는 대중적인 프로그래밍 언어입니다.

 

1.2 컴파일러란?

컴파일러 = 프로그래밍 언어로 작성된 인간의 의도(프로그램)를 기계(컴퓨터)가 이해하게 기계어로 변환하는 변환기이다.

 

기계어 = 기계가 이해하는 2진 숫자( 0 , 1 )로 작성된 언어입니다. 프로그래머가 C 언어로 작성한 C 프로그램은 C 컴파일러가 기계어로 변환한다. 변환된 기계어가 있어야 컴퓨터(기계)가 C 프로그램의 내용을 이해할 수 있다.

 

모든 기계에 인간의 의사를 강하게 전달(이식)할 수 있는 방법은 없을까?

첫번째 : 인간의 의사를 모든 기계에 한꺼번에 전달해서 수행하게 강력한 이식성을 갖는 프로그래밍 언어를 개발하기로 했다.

두번째 : 프로그래밍 언어를 실제로 기계가 이해할 수 있게 기계어로 변환하는 변환기를 개발하기로 했다.

이 변환기의 이름을 컴파일러라고 불렀다.

 

계획이 진행되고 결과로 C언어와 C컴파일러를 개발할 수 있었다.

 

UNIX 계열의 C 컴파일러에는 GCC가 있고, 윈도우즈 계열의 C 컴파일러에는 Visual C++이 있다.

 

1.3 프로그램 작성 방법 4단계

 

STEP 1 STEP 2  STEP 3  STEP 4
인간 컴파일러 링커 로더
(1)↓ (4)↓ (7)↓ (10)↓
프로그램 작성 컴파일 링크 로딩
(2) (5) (8) (11)
소스파일 생성 *.c 오브젝트파일 생성 *.obj 실행파일생성 *.exe 실행
(3)↗ (6) (9)  

 

STEP 1 

프로그램작성 (1)(2)(3)

(1) 인간이 C언어의 문법에 맞게 소스 코드를 작성해서 결과물로

(2) 소스파일이 만들어진다. 확장자는 c

(3)만들어진 소스파일은 다음 단게의 컴파일러에 넘겨진다.

 

STEP 2

컴파일 (4)(5)(6)

(4) 컴파일러는 소스파일을 기계가 이해할 수 있게 기계어로 변환하는 컴파일러 작업을 수행하여 결과물로

(5) 오브젝트파일이 만들어진다. 확장자는 obj

(6) 만들어진 오브젝트 파일은 다음 단계의 링커에 넘겨진다.

 

STEP 3

링크 (7)(8)(9)

(7) 링커는 오브젝트 파일과 표준 라이브러리 함수를 연결하여 하나의 파일로 통합하는 링크 단계를 수행하여 결과물로

(8) 실행파일이 만들어진다. 확장자는 exe

(9) 만들어진 실행파일은 다음단계의 로더에 넘겨진다.

 

*표준라이브러리 : C 언어에서 기본적으로 제공하는 함수들의 모음이다. 

 

STEP 4

로딩과 실행(10)(11)

로더는 실행 파일을

(10) 주기억 장치(RAM)에 로딩(적재)함으로써 CPU가 실행 파일을

(11)실행하도록 도와줍니다.

 

반응형

'프로그래밍_개발 > C' 카테고리의 다른 글

C언어 개인노트#006  (0) 2020.05.11
C언어 개인노트#005  (0) 2020.05.07
C언어 개인노트#004  (0) 2020.05.07
C언어 개인노트#003  (0) 2020.05.07
C언어 개인노트#002  (0) 2020.05.07

댓글