Programming/C C++
화면에 문자열을 출력하기 위해서 다음과 같은 C Program을 작성하였습니다.

#include <stdio.h>

main()
{
  printf("hello\n");
}



이 Source를 Compile하게 되면 exe실행 File과 함께 확장자가 obj인 Object File도 같이 만들어지게 됩니다. 이 Object는 Source를 Computer가 알아들을 수 있는 기계어로 변환한 것이지만 그렇다고 실행할 수는 없습니다.

Program에서 화면에 문자열을 출력하기 위해 printf()함수를 사용하여 간단하게 처리하였는데 사실 화면에 어떠한 내용을 표시하려면 Graphic 초기화부터 시작해 매우 복잡한 과정을 거치야 합니다.

이 복잡한 과정을 Programming 할때마다 개발자가 일일이 처리해야 한다면 무척 귀찮고 힘들테지만 printf()함수를 호출하는 것만으로 쉽게 해결할 수 있었습니다.

이것이 가능한 이유는 printf()를 통해 어떠한 과정을 거쳐 표시할 것인지에 대한 정의가 stdio.h 라는 header File에 존재하기 때문입니다.(더불어 해당 함수가 정확히 쓰이도록 유도하기 위한 목적도 있습니다.)

Program에서 #include <stdio.h> 라고 되어있는 부분은 stdio.h안의 모든 내용을 해당 Source File에 포함시킨다는 뜻이지만 이걸 입력한 것만으로 끝나지 않습니다. 실제 개발자가 작성한 Source와 해당 header File을 결합하는 과정이 필요한데 그것이 바로 Link작업입니다.

결국 C Program이 Compile되는 과정은 다음과 같이 정리해 볼 수 있습니다.

4600>Source 작성 -> obj 생성 -> 표준 Library와 System호출과의 결합 -> exe 생성

여기서 System호출이라는 것은 Software가 Computer hardware나 OS(Operating System)의 자원을 효과적으로 이용할 수 있도록 해주는 것이라고 할 수 있습니다.

앞서 어떠한 내용을 화면에 표시할때에는 여러가지 과정을 거쳐야 한다고 했는데 이중에는 System호출이 필요한 경우도 있습니다. 예를 들어 화면표시, Printer 인쇄, Keyboard 또는 Mouse로 부터의 입력등등... 이 바로 그것입니다.

만일 OS에서 System호출등의 작업을 제공해 주지 않으면 개발자는 Program작성시 hardware제어부터 시작해 원하는 결과를 얻을때까지의 막대한 작업을 일일이 해주어야 하는 상당히 비효율적인 상황이 발생할 수 있습니다.

따라서 Source File은 표준 Library와 결합하고 다시 표준 Library는 경우에 따라 System호출을 통하여 원하는 동작을 수행할 필요가 있는 것입니다.
0 0