소프트웨어/C 언어

[C언어]19.#include 가 어떻게 작동하는가. (#include , #의 의미 )

리습 2013. 6. 6. 08:30


 안녕하십니까. 리습입니다.


 지금까지 우리는 많은 것을 배웠습니다. C언어 문법에 대하여 지금까지 배운것만으로도 많은 프로그램을 '구현' 할 수 있습니다. (물론 굉장히 어려운 부분이 많을 겁니다만....) 우리가 지금까지 배운 기본기로 예시 프로그램을 한번 보도록 하겠습니다.

 코드

 #include <stdio.h>

 int sum ( int a , int b );

 int main( void )

 {

       printf("두숫자는 1 과  10 이며 이 두숫자를 더하면 %d 입니다.\n", sum(a, b));

 }

 int sum ( int a , int b )

{

     return a+b;

}

 

 결과

 

 두숫자는 1 과 10 이며 이 두 숫자를 더하면 11 입니다.



 지금까지 배운것들로 이 코드는 손쉽게 해석 되실 겁니다. 단 맨 위에 #include 는 아직 의문점이 많죠. 단순히 헤더파일을 불러오기 위한 것이다. 라고 설명은 드렸지만 정확하게 저것이 어떻게 역활을 하는지 설명하지는 않았습니다. 왜냐하면 저 # 이라는 것은 엄밀하게 말해서 프로그래밍 문법적인 역활을 하는 것이 아니기때문입니다.(C언어에 포함되어있긴 합니다.) 그럼 저 #의 정체는 무엇일까요. 저 #은 바로 컴파일러에게 명령을 하는 키워드 전처리기 라고 합니다. 

 #include , ~을 포함해라.


  컴파일러는 우리가 만든 C언어 글을 기계가 알아들을수 있도록 기계어로 번역합니다. 이 과정을 컴파일 (compile) 이라고 하며, 이러한 역활을 하는 프로그램이 컴파일러입니다. 우리가 사용하는 비쥬얼스튜디오나 데브C++ 등이 컴파일을 하는 컴파일러인것입니다. 그런데 컴파일러가 컴파일 작업을 할 때 우리가 여러가지를 지정해줘야 할 필요가 있습니다. 그런 명령들이 필요할때 #을 맨처음에 적어주는 것입니다. 그래서 #을 이용한 명렁어들을 '전처리기' 라고 합니다. 컴파일 전에 처리해줘야하는 일 이라는 의미죠.

 그럼 #include 의 의미는 이제 예측이 됩니다. 컴파일러에게 헤더파일을 추가해라 라고 명령을 하는 것입니다. 즉 컴파일을 하기전에 헤더파일을 추가하고 해라 라는 의미입니다. 실제로 #include가 헤더파일에서 하는 작업은 별거 아닙니다. 헤더파일을 통체로 .cpp 파일에 복사붙여넣기 하는것입니다.

 


헤더파일에는 함수의 선언부분이 들어 있고 #include 를 사용하여 헤더파일을 포함시킨다면 컴파일러는 단순히 헤더파일에 있는 코드를 복사하여 #include  가 있는 곳에 붙여넣기 합니다. ( 치환 한다고 보셔도 됩니다. ) 별다른 작업을 하지 않는 거죠. 그냥 이런게 있구나 정도로 넘어가셔도 됩니다 .

 전처리기 라는 것은 별거 아닙니다. 컴퓨터를 위해서라기 보단 사람을 위해서 만들어진 것들이 대부분이기 때문이죠. 동작또한 단순히 붙여넣기, 매크로 등 간단합니다. 전처리기에 대한 자세한 사항은 나중에 몰아서 보도록 하고 이번엔 #include 를 알아보는 선에서 마치도록 하겠습니다.