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 #시스템프로그래밍 #개발자 #파일입출력
댓글 없음:
댓글 쓰기