2015년 5월 21일 목요일

[Grind Away] c언어 헤더파일(header file) 생성 시 중복 포함을 방지 기법

C / C++ · 2015/05/21

C언어에서 많이 발생하는 실수 중 하나가 헤더파일을 중복으로 포함시키는 것이다.

1 // test.h 2 #include "hello.h"

3 4 ... cs 1 // test2.h 2 #include "hello.h"

3 4 ... cs 1 // main.cpp 2 #include "test.h"

3 #include "test2.h"

4 5 ... cs 위 코드를 보라

main.cpp에서는 test.h 와 test2.h 두 헤더를 추가하고 있다.

사용자 입장에서는 전혀 문제가 없어 보이지만 실제로 test.h 와 test2.h는 각각 동일한 헤더인 hello.h를 포함하고 있다.

이런 경우를 방지하기 위해 헤더를 만들 때 아래와 같이 선언해 주는것을 권장한다.

1 2 #ifndef __HELLO_H__ cs 3 #define __HELLO_H__ 4 5 ...

6 7 #endif 8 위 코드와 같이 선언해 주고 ... 부분에 헤더에 들어갈 코드를 입력하면 된다.

코드를 해석하면 먼저 ifndef 를 통해 __HELLO_H__ 가 선언되어 있는지 확인한다.

만약에 선언되어있지 않다면 아래 부분을 실행하고, 선언되어 있다면 endif부분 까지 건너뛴다.

만약 이 헤더를 중복정의 한다면, 먼저 정의된 헤더 부분에서 __HELLO_H__를 #define을 통해 선언했으므로 두번째 선 언되는 헤더에서는 ifndef에 걸려 동일한 헤더가 실행되지 않게된다.

C라이브러리의 헤더를 보면 거의 모든 헤더가 위와 같은 구조로 시작하는것을 확인할 수 있다.

물론 필자도 헤더파일을 선언할 때 위 코드를 습관처럼 먼저 쓰고 시작한다. 저런 헤더파일을 작성할 때 무조건 써주는 습 관을 들이면 상당히 좋다.

#C언어 #Cpp #시스템프로그래밍 #개발자 #파일입출력

댓글 없음:

댓글 쓰기