분할 컴파일을 하다보면 사용자가 정의한 헤더 파일이 중복되는 경우가 발생할 수 있다. 헤더 파일의 중복은 헤더 파일 안에 정의한 것이 2번 중복 정의될 수 있으므로 반드시 막아야한다.
아래 코드는 소스파일 한개와 헤더파일 2개로 구성되어있다.
main.cpp
#include <iostream>
#include "header1.h"
#include "header2.h"
using namespace std;
int main(void) {
cout << func1() << endl;
cout << func2() << endl;
return 0;
}
header1.h
using namespace std;
string func1() {
string s1 = "header1";
return s1;
}
header2.h
#include "header1.h"
using namespace std;
string func2() {
cout << "header1.h 가 필요행~ " << func1() << endl;
string s2 = "header2";
return s2;
}
위의 소스코드를 컴파일하면 에러 발생

main.cpp는 header1.h와 header2.h가 동시에 필요하며, header2.h는 func1()를 사용하기 위해 header1.h가 필요하다. 관계를 그림으로 나타내면 아래와 같다.

위 그림에서 보이는 것과 같이 헤더파일의 중복이 발생한다. 이때 중복되는 헤더 파일에 제일 앞에 #pragma once를 선언하게 되면 3번 중복의 발생을 피할 수 있다. #pragma once를 사용하게 되면 이미 인클루드한 사용자 헤더파일의 중복을 막을 수 있다. 👉🏻 #pragma once
“이 헤더 파일은 중복하지 마세요” 라는 뜻으로 이해하면 된다. 하지만 지원하지 않는 컴파일러가 있다는 것을 알아두자.
#pragma once 사용
#pragma once
using namespace std;
string func1() {
string s1 = "header1";
return s1;
}