오늘은 공부하다가 만난 #ifndef를 정리해 보겠습니다.
- #ifndef -
C 언어를 학습 초기에는 대부분 한 파일에 모두 코드를 작성합니다.
하지만 실력이 초급에서 중급으로 넘어갈 때 즈음 코드의 양이 많아지면서
파일을 여러개로 나눠서 관리해야 할 때가 오죠.
이럴 때 필요한 헤더파일을 #include를 이용하여 추가하게 되는데
같은 헤더파일이 각각의 파일에서 추가하여 중복으로 선언되는 경우가 있습니다.
이를 방지하기 위해서는 #ifndef를 적절히 활용하면 됩니다.
예를 들어 배열리스트를 작성할 때
인터페이스 부분인 헤더파일과 구현부분인 c파일,
그리고 메인함수를 구현한 파일 이렇게 3부분으로 나누었다면
인터페이스 부분인 헤더파일을 나머지 두 파일에서 모두 추가해줘야 합니다.
이럴 때 헤더파일 내에서 다음과 같이 선언해 주면 됩니다.
#ifndef __ARRAY_LIST_H__ // __ARRAY_LIST_H__부분에는 어떠한 문자를 넣어도 상관이 없습니다.
#define __ARRAY_LIST_H__ // 단 #define의 __ARRAY_LIST_H__도 함께 바꿔 주어야 합니다.
..
..
#endif
이렇게 하면 컴파일러가 컴파일시 ArrayList.h파일이 추가되어 있는지 미리 확인한 후
추가되어 있지 않다면 전처리하고 추가되어 있다면 #endif로 건너뛰어서 불필요하게
컴파일러가 한 번 더 검사할 필요가 없게 됩니다.
또한 중복 선언에 따른 Compile error도 해결할 수 있습니다.
저 같은 경우는 ArrayList.h 헤더파일에 있는 구조체가 중복선언되어 Error가 나타났었습니다.
error C2011: '구조체이름' : undeclared identifier
'Archive' 카테고리의 다른 글
[Utility 추천] Windows7 Snap기능을 강화한 유틸리티 - GridMove / PowerResizer (0) | 2012.11.03 |
---|---|
삼성전자 소프트웨어멤버십 회원 선발 공고 (0) | 2012.10.20 |
[UVA] 뒤집어서 더하기 (Reverse And Add) (0) | 2012.03.25 |
[UVA] 공통된 변경 문자열 (Common Permutation) (0) | 2012.03.25 |
이진 탐색 알고리즘 (Binary Search) (0) | 2012.03.23 |