[C++] 헤더 파일


.cpp 확장자를 가진 파일은 C++ 프로그램의 유일한 파일이 아니다. 다른 유형의 파일을 헤더 파일(header file)이라고 한다. 헤더 파일은 보통 .h 확장자를 가지고, 다른 파일에 대한 선언을 가지고 있다.

#include <filename>

<>는 컴파일러와 함께 제공되는 헤더 파일을 include 할 때 사용한다. 이 헤더 파일은 C++ 런타임 라이브러리의 헤더 파일로써 운영체제의 특별한 위치에 존재한다.

#include "filename"

"" 는 소스 파일이 있는 디렉터리에서 헤더 파일을 include 하도록 전처리기(preprocessor)에게 지시한다. 이런 방법으로는 자신이 작성한 헤더 파일을 include 한다.

헤더 파일 작성

보통 함수를 작성하면 컴파일 할 때 그 함수가 무엇인지 전방 선언(forwards declaration)을 한다. 하지만 사용하고자 하는 모든 함수들을 전방 선언을 하는 것은 귀찮은 일이다.

헤더 파일이 이런 부담을 줄여주는데, 헤더 파일을 사용하면 선언을 필요한 만큼 한 번만 작성하면 되고, 함수 원형에 대한 유지보수를 편하게 해준다.

헤더 파일은 두 부분으로 구성된다.

  1. 헤드 가드(header guard) : 헤더 파일이 같은 파일에서 두 번 이상 include 되지 않게 해준다.
  2. .h 파일의 실제 내용 : 다른 파일에서 볼 수 있는 모든 함수에 대한 선언
//header guard
#ifndef ADD_H
#define ADD_H

//.h 실제 내용 : 선언
int add(int x, int y);

#endif

main.cpp 파일에서 이 헤더 파일을 사용하려면 이 파일을 include 해야 한다.

따라서 main.cpp에서는 아래와 같이 헤더 파일을 include 한다.

#include <iostream>
#include "add.h"

int main() {
  std::cout << "sum is" << add(3,4) << std::endl;
  return 0;
}

add.cpp는 아래와 같다.

int add(int x, int y) {
  return x + y;
}

컴파일러가 #inlcude "add.h" 라인을 컴파일하면 add.h의 내용을 현재 파일의 그 라인 시점에 복사한다. add.h에 add() 함수 원형이 있으므로 전방 선언으로 사용되는 것이다.