구글 스타일 가이드: The #define Guard

brewmaster
newworld-kim
Published in
Oct 26, 2022
Photo by Krishna Pandey on Unsplash

헤더 가드를 사용해서 동일한 헤더가 여러번 include 되는 것을 피해야 한다. C++ 사용자라면 모두가 알만한 내용이지만, 몇가지 유의사항과 함께 소개하고 있다.

헤더 가드를 작성하는 방법은 #define 을 사용하는 방법 외에도 #pragma once 가 있다. 두 가지 방법 중 어떤 방법이 더 효과적인지는 위키피디아와 이 stack overflow를 참고하자. 구글 스타일 가이드를 따르기 위해서는 #define 을 사용해야 한다.

심볼 이름을 잘 짓기

매크로를 이용한 헤더 가드는 매크로 심볼에 의해서 각각의 헤더 가드가 구분되는데, 심볼을 유니크하게 만들기 위해 각 파일의 경로와 이름을 심볼명으로 그대로 사용하는 것을 제안한다. 가령, foo/src/bar/baz.h 헤더가 있다면, FOO_BAR_BAZ_H_ 라고 지어줄 수 있겠다.

#ifndef FOO_BAR_BAZ_H_
#define FOO_BAR_BAZ_H_

...

#endif // FOO_BAR_BAZ_H_

CppCoreGuidelines 에서도 같은 내용이 있으니 읽어봐도 좋겠다.

순환 의존성 조심하기

헤더 가드를 작성할때 순환 의존성을 조심해야 한다. 순환 의존성은 코드를 복잡하게 만들고 컴파일 시간을 늘리게 만든다.

// Example, Bad! (CppCoreGuidelines)// file1.h: 
#include "file2.h"
// file2.h:
#include "file3.h"
// file3.h:
#include "file1.h"

--

--