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 |
댓글