PCH(Precompiled Header) 개요
- C/C++은 각 .cpp(translation unit) 를 컴파일할 때, #include로 포함된 헤더를 매번 전처리/파싱/템플릿 처리한다.
- 프로젝트가 커질수록 <windows.h>, STL, MFC/ATL, 대형 3rd-party 헤더 때문에 헤더 해석 비용이 빌드 시간을 크게 잡아먹는다.
- PCH를 쓰면, 여러 .cpp에서 반복되는 헤더 처리 비용을 미리 컴파일해둔 결과(.pch)를 재사용해 줄일 수 있다.
- Visual Studio 기본 PCH 파일명:
- 최신 템플릿: pch.h / pch.cpp
- VS 2017 이전(레거시): stdafx.h / stdafx.cpp
stdafx.h / pch.h는 “특수한 헤더”가 아니다
- stdafx.h(또는 pch.h)라는 이름 자체에 특별한 기능이 있는 건 아니다.
- MSVC가 프로젝트 설정(/Yc, /Yu 등) 으로 “이 헤더를 기준으로 PCH를 생성/사용”하도록 연결해둔 관례적인 파일명이다.
- 따라서:
- 파일명 변경 가능
- 어떤 헤더를 PCH로 삼을지도 변경 가능
→ 단, 설정도 함께 수정해야 한다.
아래 사진은 MSVC 환경에서 "프로젝트 속성 > C/C++ > 미리 컴파일된 헤더"에서
- 미리 컴파일된 헤더를 사용(/Yu)로
- 미리 컴파일된 헤더 파일을 pch.h로 수정한 모습니다. (원래는 stdafx.h)
- 프로젝트 및 VC 환경에 따라 기본값이 다를 수 있다.

사용 방법(기본 패턴)
- 거의 모든 .cpp에서 공통으로 쓰는 헤더를 pch.h(또는 stdafx.h)에 모아둔다.
- pch.cpp(또는 stdafx.cpp)에 아래처럼 include 1줄을 둔다.
- 이 파일을 기준으로 MSVC가 .pch를 생성하고, 다른 .cpp들은 그 결과를 재사용한다.
무엇을 pch.h에 넣을까? (가이드)
- ✅ 넣기 좋은 것: 안정적인(stable) 헤더
- 예: <vector> 같은 STL, 자주 안 바뀌는 시스템/플랫폼 헤더
- PCH는 pch.h(및 그것이 include하는 파일들)가 바뀔 때만 다시 만들어진다.
- ⚠️ 자주 바뀌는 헤더를 넣으면:
- PCH가 자주 재생성되고
- 결과적으로 전체 리빌드가 늘어나 시간이 더 오래 걸릴 수 있다.
예시 코드
pch.h (또는 stdafx.h)
#pragma once
// 자주 안 바뀌는(Stable) 헤더들만 넣는 게 핵심
#include <iostream>
#include <vector>
#include <string>
// Windows 프로젝트라면 흔히 넣음(프로젝트 성격에 따라)
// #define WIN32_LEAN_AND_MEAN
// #include <windows.h>
pch.cpp (또는 stdafx.cpp)
#include "pch.h"
// 이 파일이 보통 "Create (/Yc)" 담당
'TIL(Today I Learn) > TIL' 카테고리의 다른 글
| 바이브 코딩 중인 내가 쓰는 Agent Skills - 260611 (0) | 2026.06.02 |
|---|---|
| 구조체 패킷의 한계와 직렬화 버퍼(Serialization Buffer)가 필요한 이유 (0) | 2026.02.19 |
| 메모리 풀과 프리리스트 – 고정 크기 객체의 Alloc/Free를 빠르게 만드는 방법 (0) | 2026.02.19 |
| 링버퍼(Ring Buffer) - 원활한 통신을 위한 자료구조 (0) | 2026.02.19 |
| NHN 코딩테스트 후기 (0) | 2023.08.12 |