본문 바로가기

Archive

[ C언어 ] 전처리문 ( #ifndef )

오늘은 공부하다가 만난 #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