Programming/Technic

C++ 헤더파일에서 전역변수 선언하여 사용하기

minarae7 2009. 1. 14. 11:02
728x90
반응형
C++로 프로그램을 작성하다가 난관에 부딪혀서 삽질을 좀 하다가 해결책을 찾아내어서 몇 자 적어본다..

모듈로 나누어서 프로그램을 작성하여 make로 컴파일할 경우에 gcc를 사용하는 C에서는 전역변수를 알아서 처리해준다..

따라서 전역변수에 대해서 따라 신경을 쓸 필요가 없다..일반적으로 그렇다..

그러하기 때문에 gcc에서 옵션을 추가해서 사용하는 g++도 역시 그러할 것이라고 생각했다..

하지만 C++용 컴파일을 하는 g++에서는 이와 같은 것을 용납하지 않는다..완전 난감..

같은 헤더파일을 참조하고 같은 변수를 건드려야 하기 때문에 헤더파일마다 변수를 선언할 수도 없고 서로 같은 헤더파일을 가리키고 있는 경우가 있기 때문에 이것을 어떻게 처리해야 하는지 대해서 완전 고민에 고민을 거듭했다..

구글링을 해본 결과 kldp에서 나와 같은 문제에 봉착하여 올라온 질문을 확인했다..

거기에 달린 답변 중에서 괜찮은 방법이 있어서 그 방법을 사용하였다..

매크로를 사용하여서 처리하는 방법인데 꽤 괜찮은 방법인듯 싶다..실용적이기도 하고 코드를 보면 뭔가 있어보이는 포스까지..+_+

아래는 질문에 대한 답변에서 참조한 부분만 긁은 것이다..

----------------- test.h -------------------
 #ifndef __TEST__
#define __TEST__

#include <stdlib.h>
#include <stdio.h>

#ifdef EXT_GLOBAL
#define EXT
#else
#define EXT extern
#endif

// 이 부분!!
EXT double test;

void temp();

#endif


그리고 이 변수를 처음 선언하는 한 곳에서만
"test.h" 를 include 하기 전에
EXT_GLOBAL 을 define 해 주면 됩니다.

----------------- test.c -------------------

 #define EXT_GLOBAL
#include "test.h"
/* 이하 생략 */


 ----------------- temp.c -------------------

#include "test.h"
/* 변화 없음 */


출처 : kldp.org( http://kldp.org/node/20862 )

728x90
반응형