#ifndef C/C++

다음과 같은 내용을 가진 a.h라는 헤더파일이 있다고 칩시다.

 

#define A 10

 

어떤 소스파일에서

#include <a.h>

#include <a.h>

 

이런 문장이 있다면, a.h의 내용이 2번 들어가게 됩니다.

 

그렇다면 전처리기가 저 문장을 처리할 때, #include <a.h> 2개는 모두

#define A 10

으로 치환됩니다.

 

그렇다면 무슨 일이 발생할까요?

A가 중복선언 되었으니 컴파일 에러가 발생합니다.

 

그래서 질문처럼, #ifndef~#define~#endif를 사용하는 것입니다.

 

a.h의 내용을

#ifndef A_H_

#define A_H_

#define A 10

#endif

 

라고 바꾸면,

#include <a.h>

#include <a.h>

#ifndef A_H_

#define A_H_

#define A 10

#endif

//-중간-//

#ifndef A_H_

#define A_H_

#define A 10

#endif

라고 바뀌게 되겠죠

그런데, 처음 #ifndef가 나타났을 때는 A_H_가 선언되지 않았기 때문에

그 아래줄에 있는 A_H_와 A를 선언하게 됩니다.

그리고 #endif로 #ifndef를 닫습니다.

그러면 이제 -중간- 부분을 봅시다.

여기까지 선언된 것은 A_H_와 A가 있습니다.

그 상황에서 다음 줄에 있는 #ifndef A_H_를 만나게 되면

이미 A_H_가 선언되어 있으므로

#endif가있는 곳까지 컴파일러가 건너뜁니다.

 

따라서 이러한 방식을 사용하여 중복 선언을 막을 수 있습니다.

 

출처: http://cafe.naver.com/cafec.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=198177&social=1


덧글

댓글 입력 영역