본문 바로가기
Basic/C/C++

[C언어] 제 1 강 : 기본적인 이해

by boxbop 2011. 12. 26.
반응형

 C언어는 프로그래밍 언어 중 가장 기본이 되는 언어이며 인간이 이해하기 쉬운 고급언어 입니다. C언어 입문에 앞서서 컴파일과 링커에 대한 기본적인 이해가 필요할 것 같아 간단하게 설명하고 넘어가도록 하겠습니다.

 C언어나 JAVA같은 고급언어는 컴퓨터가 전혀 알아듣지를 못합니다. 우리나라 사람이 한국 말을 전혀 모르는 외국인에게 한국말로 백날 얘기해봤자 외국인은 전혀 알아들을 수 없죠. 한국말을 외국어로 번역해주는 통역인이 필요합니다. 이와같이 우리가 사용하는 프로그래밍 언어를 컴퓨터가 알아들을 수 있는 바이너리 코드로 변환해주는 것이 컴파일러라고 생각하시면 됩니다.

 다시 얘기하자면 한국어(C언어)를 외국어(바이너리코드)로 통역해주는 통역인이 컴파일러가 되는 것 이죠. 참 쉽죠~????ㅋㅋㅋ 그렇지만 사실 C언어를 다이렉트로 바이너리코드로 변환해주는 것은 아닙니다. 중간에 어셈블리어로 한번 더 변환 후, 바이너리 코드로 변환하죠. 어셈블리어를 바이너리 코드로 변환해주는 것은 어셈블러가 담당합니다.

 C프로그램을 컴파일러가 어셈블리 코드로 변환해주는 과정에서는 각 컴퓨터의 환경마다 각기 다른 컴파일러를 필요로 합니다. 예를들어 Intel이면 Intel컴파일러, ARM이면 ARM 컴파일러가 사용됩니다~

 그럼 링커란? 링커는 최종적으로 변환된 바이너리 코드를 실행파일로 만들어주는 역할을 담당합니다. 마찬가지로 컴퓨터의 환경마다 실행파일의 형태가 다르긴 하지만 링커가 알아서 알맞게 실행파일을 만들어 줍니다. 

 어느 정도 이해가 되셨나요~? 좀 더 사실적으로 설명해보겠습니다.
C언어로 프로그램을 만들었습니다. 그럼 C언어로 제작된 소스파일이 있겠지요~? 이 소스 파일을 컴파일러(+어셈블러)가 바이너리 코드인 오브젝트 파일로 변환 시켜 줍니다. 그럼 이 오브젝트 파일이 실행되느냐? 아닙니다. 이 것을 링커가 실행파일로 다시 변환해주어 .exe라는 확장자를 가진 실행파일이 되는 겁니다^~^!!! 아 그리고 일반적으로 컴파일러가 어셈블러의 기능까지 같이 담당하기 때문에 컴파일러가 소스파일을 바로 오브젝트 파일로 변환이 가능한 것 입니다. 나름 쉽게 설명한다고 했는데 이해는 잘 가셨나요~?ㅎㅎㅎㅎ


   
[소스파일] ----------->[오브젝트 파일] ----------->[실행파일]
                  (컴파일러)                           (링커)

 이러한 형태로 나타낼 수 있겠네요~ㅋㅋㅋ 이것으로 요번장을 마치도록 하겠습니다. 감사합니다(-_-)(_ _)(-_-)!
반응형