헤더 중복 방지 기술
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 해 봐라
위의 정보가 도움이 되셨나요? 그렇다면 댓글 하나만 남겨주세요.
댓글 하나가 운영자에겐 커다란 힘이 됩니다!


...
| 2010/06/16 20:35 | PERMALINK | EDIT | REPLY |...그..그래도안되네요