본문 바로가기

프로그래밍/C++

C++ 헤더 중복방지


C++ 프로그래밍을 하면서 성가신 작업중 하나는

헤더파일이 꼬여서 해결하는 작업이다.

별거 아닌것 같지만, 이거 때문에 시간을 왕창 잡아먹는 경우도 생기는데..


C#에서는 헤더파일 자체가 없어져 버렸기 때문에 

적어도 꼬일 걱정은 안하게 되었다.


암튼, C++에서 헤더 중복방지를 위해 하는 방법은 크게 2가지 정도 있는데

하나는 #pragma once키워드와 #define을 이용하는 방법이다.


The use of #pragma once can reduce build times as the compiler will not open and read the file after the first #include of the file in the translation unit.

#pragma once 는 컴파일러에게 더이상 중복해서 같은 파일을 읽지 말라고 알려주는

방법이다.


반면 #include guard idiom 은 호환성을 타지 않아, 안전한 방법이다.

단점이라고 하면 매번 헤더파일을 열어서 확인을 해야하므로 전자보다는

빌드가 느리다.


사실 VS 2013,2015 같은 최신 컴파일러를 사용할 경우 #pragma once 를 사용해도

별 문제는 없다. 

VC++ 5.0 이상이면 충분하다고 들었다.


하지만, 호환성이나 기타  알 수 없는 환경에서는 안전한 방법을 사용하라고

지침에도 나와있다.


There is no advantage to use of both the #include guard idiom and #pragma once in the same file.

또한 2개를 동시에 사용한다고 해도 이득은 없으니, 한개만 사용하도록 하자


https://msdn.microsoft.com/en-us/library/4141z1cx.aspx




'프로그래밍 > C++' 카테고리의 다른 글

Visual C++ 데이터 형식(범위)  (0) 2016.01.29
매크로(define) 재정의 충돌문제 해결  (0) 2016.01.26
C++11 enum class  (0) 2016.01.21
객체지향 - 인터페이스와 구현의 분리  (0) 2015.11.30
FreeImage 라이브러리  (0) 2015.10.11