2011/06/30 13:57
#ifndef _<헤더파일이름>_h
#define _<헤더파일이름>_h
--------------------------------------------------------------------------
#ifndef 전처리기는 중복된 정의를 피하기 위해서 많이 사용합니다. 물론, 다른 용도로도 많이
사용하지만, 중복 인클루드를 피하기 위해서 사용하는 코드입니다.
예를들어, C.H가 A.H를 include하고 B.H가 A.H를 include한다고 가정할때, D.H가 C.H랑 B.H를
include하면 D.H 입장에서는 A.H가 중복해서 include되게 됩니다. 이런경우, 중복 선언에 관련된
오류가 발생할수도 있는데, 이런 오류를 피하기 위해서 #ifndef 전처리기를 많이 사용합니다. ^^;
#define _<헤더파일이름>_h
--------------------------------------------------------------------------
#ifndef 전처리기는 중복된 정의를 피하기 위해서 많이 사용합니다. 물론, 다른 용도로도 많이
사용하지만, 중복 인클루드를 피하기 위해서 사용하는 코드입니다.
예를들어, C.H가 A.H를 include하고 B.H가 A.H를 include한다고 가정할때, D.H가 C.H랑 B.H를
include하면 D.H 입장에서는 A.H가 중복해서 include되게 됩니다. 이런경우, 중복 선언에 관련된
오류가 발생할수도 있는데, 이런 오류를 피하기 위해서 #ifndef 전처리기를 많이 사용합니다. ^^;
#define문은 꼭 매크로상수나 매크로함수를 정의할때 쓰는건 아닙니다. 저 위와 같은 경우는 헤더파일이 하나의 소스파일에 두번 이상 중복되서 포함되지 않도록 하는 안전장치(?)입니다.
저렇게 값을 주지 않고 정의할수 있어요.
만약 제일 첫번째 포함될때는.. #define QUEUE_H 이문장을 하나도 만나지 않았어요
(즉 정의가 되어 있지 않습니다).
그래서 #ifndef QUEUE_H ( QUEUE_H_가 정의되지 않았으면 ) 문장이 참(?)이 되지요.
그리고 아랫문장에 의해 QUEUE_H를 정의하구.. #endif를 만날때까지 쭉 소스파일에 포함시킵니다.
그리고 만약 중복 포함을 시키도록 소스를 작성했다면... 두번째로 포함할때 #ifndef QUEUE_H 이문장이 거짓이 됩니다.
왜냐하면 아까 처음 포함시킬때 QUEUE_H가 정의되지 않았으면 QUEUE_H를 정의하라고 해놓았기 때문에 지금은 이미 정의가 되어 있습니다.
그래서 #ifndef QUEUE_H 이문장은 거짓이 되고 #endif까지 쭉 포함시키지 않고 건너 뛴다고 보시면 됩니다.