|
Include Guard 라고 불리는 것인데요..
가령 a.h 가 존재할 경우 이런식으로 작성하게 됩니다.
#ifdef _A_H_
#define _A_H_
int a; // header 에 변수 선언을 하는 것은 나쁜 방법입니다. 하지만 설명을 위해서...
#endif
Include Guard 가 존재하는 이유는 Project 가 대규모로 커지게 되다보면 헤더 또는 소스 파일들간에 #include 를 서로 하다보면 소스가 중복되는 경우가 필연적으로 발생하게 되고 이 경우 doubly defined 에러가 나게 됩니다.
가령 b.h 소스에 #inlcude "a.h" 가 존재하는 경우
test.c 파일에서
#include "a.h"
#include "b.h" // a.h 내용이 b.h 에 포함되어 있음
이런식으로 하다보면 a.h 내용이 test.c 에 2번 포함이 되는 경우가 발생하는데 이렇게 될 경우 test.c 에는 a 라는 변수가 2번 나타나게 되고 당연히 컴파일러는 에러를 발생시키겠지요. 이런 경우를 위해서 한번만 include 를 하도록
Trick 을 사용하는 것입니다.
김상면 님이 쓰신 글 :
: #ifndef _이름_h
: 매크로 상수 _이름_h 가 정의 되어 있지않으면 다음 라인들을 시행하라
: #define _미름_h
: 매크로 상수 _이름_h 를 다른 곳에서 사용못하도록 하라
: #define _이름_h 123455 라고 하면 _이름_h을 123455로 정의 하라==>소스코드에서 _이름_h 는 123455와
: 완전히 똑 같은 표현이 됨
: #endif _이름_h
: 요건 모르겠음 아마 위의 #ifndef의 마지막를 가르키는 것 같음 베이직의 if문의 endif와 같은 역활을 하는거로
: 알고 있음
: _Cdecl _FARFUNC
: 요건 진짜 모름 dll생성시 이런 예약어 본것 같음
: 이만
:
: ==================================================================================================
: 얼마전에야 C++을 배우기 시작한 초보입니다.
:
: header file에 보면
:
: #ifndef _이름_h
: #define _미름_h
:
: 내용
:
: #endif _이름_h
:
: 뭐 이렇게 있는데, 어떤 역할을 하는지 궁금합니다.
:
: 그리고 변수 형태와 함수이름 사이에 있는
: _Cdecl _FARFUNC
: 이런 것들은 무엇을 의미하는지 가르쳐 주시면 감사하겠습니다.
:
: 즐거운 하루 되세요.
|