C/C++ 프로젝트에선 .h 확장자를 가진 파일을 자주 봅니다. 이 파일을 헤더 파일(Header File)이라고 부르는데요. 이걸 꼭 써야 하는 건지, 언제 어떻게 쓰는 건지, 여러 개를 써도 되는 건지 정리해보았습니다.
헤더 파일이란?
헤더 파일은 보통 함수, 구조체, 상수 등의 선언만 포함하고 있습니다. 실제 구현은 .c 또는 .cpp 파일에 존재합니다.
예를 들어 아래와 같습니다.
// math_utils.h
int add(int a, int b); // 선언만 있음
// math_utils.c
int add(int a, int b) { // 실제 구현
return a + b;
}
C 언어에서 컴파일러는 위에서부터 코드를 읽어가기 때문에 어떤 함수가 있다는 것을 미리 선언해줘야 사용할 수 있습니다. 그래서 헤더 파일은 컴파일러에게 “이런 함수, 구조체가 있다”라고 알려주는 역할을 합니다.
헤더 파일 꼭 써야 하나?
헤더 파일 없이도 프로그램은 돌아갑니다. 예를 들어 하나의 .c 파일에서 함수 정의가 main 함수보다 먼저 나오면 별도 선언 없이도 문제 없습니다.
int add(int a, int b) {
return a + b;
}
int main() {
return add(3, 5); // 문제 없음
}
하지만 프로젝트가 커지면 코드가 여러 .c 파일로 나뉘어 있고, 각 파일에서 공통 함수나 구조체를 쓰기 위해 선언을 공유해야 합니다. 이 선언을 매번 복붙할 수는 없기 때문에 헤더 파일로 따로 분리해두는 것이 일반적이고 거의 필수에 가깝습니다.
헤더 파일 사용 방법
헤더 파일은 #include 지시문을 통해 소스 파일에 포함합니다. “” (큰따옴표)를 사용하면 컴파일러는 현재 디렉터리 또는 지정된 사용자 경로에서 헤더 파일을 찾습니다.
#include "user.h"
#include "config.h"
<> (꺾쇠)를 사용하면 컴파일러는 시스템 디렉터리나 컴파일러가 제공하는 기본 경로에서 헤더 파일을 찾습니다.
#include <stdio.h>
#include <stdlib.h>
헤더 파일은 윈도우, 리눅스 OS에서 모두 동일하게 사용할 수 있습니다.