본문 바로가기

개발자/C++(Linux, Window)

헤더 가드(Header guard)

반응형

헤더 가드(header guard)라는 메커니즘을 통해 중복 정의를 막을 수 있다. 같은 변수와 함수를 한 번더 정의하는것.

이 문제는 헤더가드로 해결할 수 있다. 헤더 가드는 조건부 컴파일 지시자를 사용한다.

#ifndef SOME_UNIQUE_NAME_HERE 
#define SOME_UNIQUE_NAME_HERE // 선언과 정의 

#endif

위 헤더 파일이 포함(include)되면 SOME_UNIQUE_NAME_HERE가 정의되었는지 확인한다. 헤더 파일을 처음 include하면 SSOME_UNIQUE_NAME_HERE는 정의되어 있지 않다. 그러므로 SOME_UNIQUE_NAME_HERE를 정의하고 헤더 파일의 내용을 include한다. 그러나 이전에 헤더 파일을 include 했다면 SOME_UNIQUE_NAME_HERE는 이미 정의되어 있기 때문에 헤더 파일 내용이 무시된다.

모든 헤더 파일에는 헤더 가드가 있어야 한다. SOME_UNIQUE_NAME_HERE은 일반적으로 _H가 붙은 헤더 파일의 이름을 사용한다.



#pragma once

현재 많은 최신 컴파일러는 #pragma 지시자를 이용한 단순한 헤더 가드를 지원한다.

#pragma once

#pragma once는 헤더 가드와 같은 기능을 하며, 짧다는 게 장점이다.

그러나 C++ 언어의 공식적인 부분이 아니므로 모든 컴파일러가 지원하는 것은 아니다. 호환성을 위해 헤더 가드를 사용하는 것이 좋다.

 

반응형