어떤 순서로 배열해도 잘 굴러가기만 할 헤더의 배열 순서이지만 나는 아래와 같은 방법을 사용하고 있다.
1. 그 Application의 헤더
2. 사용 Library의 헤더
3. 표준 헤더
만약 app라는 이름의 application이 avejlib이라는 이름의 Library를 사용하고, 거기에다가 표준 입출력을 사용하고 있을 때 다음과 같이 사용한다는 것이다.
#include “app_type.h”
#include “app_traits.h”
#include “app_util.h”
#include “avejlib_renderer.h”
#include “avejlib_audio.h”
#include “avejlib_device.h”
#include <stdio.h>
#include <vector>
#include <algorithm>
이렇게 하면 실제 디펜던시와는 반대로 배열이 되는데, 이렇게 했을
때 library(주로 자체로 만든 것)가 제대로 디펜던시가
설정되었는지를 컴파일 시에 알 수 있기 때문이다.
예를 들어 apputil.h가 <vector>에 디펜던시가 있는데 그것을 내부적으로 해결해 놓지 않으면 위의 경우는 에러가 난다. 그렇게 하는 이유는 ‘어떠한 헤더도 그 헤더를 사용하기 위한 전제 조건을 알 필요가 없어야 한다’라고 생각하기 때문이다. 내가 “apputil.h”를 A()라는 함수를 쓰기 위해 include 했는데, “apputil.h”의 B()라는 함수 때문에 생긴 <vector>에 대한 디펜던시를 알아야 할 필요가 없기 떄문이다.
참고로 구글의 coding guideline은 이와 반대이며 그들도 그들 나름대로의 이유 때문에 그렇게 했을 것이다.
Posted by 안영기