헤더파일을 보면 다음과 같이 #ifndef와 #endif가 나온다. 이는 3-1.h 헤더파일을 다른 소스파일이 여러 번 include 했을 때 발생하는 문제를 미연에 방지하기 위해서이다.
#ifndef __3_1_h__
#define __3_1_h__
… … …
#endif /* ifndef __3_1_h__ */
예를 들어, 3-1.h 헤더파일을 include한 또 다른 헤더파일인 3-2.h 파일이 존재하는데, 3-2.cpp 파일에서 다음과 같이 include 했다고 하자.
#include “3-1.h”
#include “3-2.h”
이와 같이 했을 때, 3-2.cpp 파일에는 3-1.h 파일이 두번 include 된 것과 마찬가지가 된다. 왜냐하면 3-2.h 파일내부에서 3-1.h 파일에 대한 include가 이루어졌기 때문에 3-2.cpp 파일에는 3-1.h 파일이 두 번 include 된 것과 동일한 것이다. 이럴 경우 많은 에러가 발생한다. 변수 선언이 있다면 동일한 이름의 변수가 두 번 이상 선언된 것이고, 함수 선언이 있다면 동일한 함수가 두 번 이상 선언된 것이기 때문에 에러를 피할 수 없다.
이때 #ifndef과 #define 그리고 #endif 구문을 사용하면 동일한 헤더파일이 두 번 include 되는 것을 방지할 수 있다. 즉, #define 의 내용이 실행되지 않았으면 #endif 구문까지를 실행하고, #define의 내용이 실행되었으면 이 구문이 실행되지 않는다. 따라서 언제나 한번만 실행이 되도록 만들 수 있는 것이다. 참고로 #ifndef(“If not define”)과 반대로 행동하는 것은 #ifdef 구문이다.
Tags: C, 요약, 이것이 C++ 이다