태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

헤더 중복 방지 기술

Posted 2008/01/11 18:16


댓글 하나가 운영자에겐 커다란 힘이 됩니다!

------------------------------- a.h -----------------------------------


// a.h

// 헤더 중복 방지 기술

 

// 1번 방법

// include guard : 헤더가 2번 include 되는것을 방지한다

//                                 모든 헤더는 반드시 있어야한다.

//#ifndef _A_H 또는 

#if !defined(_A_H)

#define _A_H        // 되도록이면 파일 이름으로 주는게 좋다(충돌방지)

 

 

// 3번 방법

// VC++ 에서는 헤더가 2번 include 되는 것을 막기 위해 아래명령을 제공

#if _MSC_VER > 1000  // VC++ 버전 1.0 이상에서 지원한다.

#pragma once // 이 헤더는 1번만 컴파일 되어야 한다.

#endif

 

struct A

{

 

};

 

#endif // _A_H




------------------------------- a.cpp -----------------------------------


// a.cpp

 

/*

#include "a.h"   // 컴파일러가 fopen("a.h") 열어서 복사해온다. 그리고 닫는다

#include "a.h"   // 역시 컴파일러가 a.h를 열기는 열어야 한다.

*/

 

/*

// 2번 방법

// 헤더가 아닌 소스 쪽에서 중복 include를 막는 기법 - 이전 방식과 차이점은?

#ifndef _A_H

#include "a.h"   // fopen으로 연다

#endif

 

#ifndef _A_H

#include "a.h"   // 실행이 안되므로 열지 않는다

#endif

*/

 

// 3번 방법

// 컴파일시 #pragma once가 정의된 헤더는 기억했다가

// 다시 include시에 체크를 해서 open하지 않는다

#include "a.h"

#include "a.h"

 

 

void main()

{

 

}

 

// build 해 봐라




==============================================================================

------------------------------- 최선의 코드 -----------------------------------


----------------------------------- a.h ---------------------------------------


// a.h

 

// include guard : 헤더가 2번 include 되는것을 방지한다

//                                 모든 헤더는 반드시 있어야한다.

//#ifndef _A_H   

#if !defined(_A_H)

#define _A_H        // 되도록이면 파일 이름으로 주는게 좋다(충돌방지)

 

 

// 3번 방법

// VC++ 에서는 헤더가 2번 include 되는 것을 막기 위해 아래명령을 제공

#if _MSC_VER > 1000  // VC++ 버전 1.0 이상에서 지원한다.

#pragma once // 이 헤더는 1번만 컴파일 되어야 한다.

#endif

 

struct A

{

 

};

 

#endif // _A_H



---------------------------------- a.cpp -------------------------------------

// a.cpp

 

// 3번 방법

// 컴파일시 #pragma once가 정의된 헤더는 기억했다가

// 다시 include시에 체크를 해서 open하지 않는다

#include "a.h"

#include "a.h"

 

 

void main()

{

 

}

 

// build 해 봐라

위의 정보가 도움이 되셨나요? 그렇다면 댓글 하나만 남겨주세요.
댓글 하나가 운영자에겐 커다란 힘이 됩니다!

  1. ...

    | 2010/06/16 20:35 | PERMALINK | EDIT | REPLY |

    ...그..그래도안되네요

Write your message and submit
« PREV : 1 : ... 391 : 392 : 393 : 394 : 395 : 396 : 397 : 398 : 399 : ... 436 : NEXT »