본문 바로가기

# IT, Computer Science/MFC, API

MFC 에서 구조체 전역 변수로 사용하기

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
 프로그램을 작성 하던중 클래스의 멤버 함수가 아닌 전역 함수를 사용 하려다 보니
자연스래 전역변수가 필요하게 되었다. 물론 전역변수의 사용은 좋은 현상은 아니지만...
 Win32 API 에선 쉽게 전역변수를 사용 했는데 MFC 프로젝트에서 사용 하려다 보니
쉽지만은 않은것 같다. c/c++ 문법책 본지는 오래 되었고, MFC 구조는 깊숙히는 모르다 보니...
그래도 한번 시도해 봤다.

 MFC wizard 가 생성한 프로젝트 에서는 stdafx.cpp 파일을 제외하고선
모두 stdafx.h 파일을 포함한다. (#include "stdafx.h")
따라서 이곳에 전역변수를 선언해 두면 프로젝트 내에 모든 cpp 파일에서 참조할 수 있다.
(변수 뿐만 아니라 함수, 상수등도 정의 가능)



1. 일반 변수의 전역변수 사용의 예

// StdAfx.h
extern int g_nData;

// StdAfx.cpp
int g_nData = 0;

프로젝트 내 cpp 파일에서 바로 g_nData 전역변수에 접근 가능




2. 구조체의 전역변수 사용의 예
    - 헤더 파일(.h)에 구조체를 정의 한다.
    - 변수의 선언과 초기화는 소스파일(.cpp)에 해준다.
    - 다른 소스파일에서 위에 선언한 변수를 사용하기 위해선
      헤더파일에 "extern" 키워드를 이용해서 선언해 주고
      소스 파일에서 사용해 주면 된다.

// stdafx.h
struct CLIENTDATA {
  char arrUserName[32];          
  char arrComName[32];         
  int iAppNum;              
};
 


// stdafx.cpp
#include "stdafx.h"

CLIENTDATA structClientData;



// main.h
extern CLIENTDATA structClientData;


// main.cpp
structClientData.iAppNum = 10; 






참고)
1. Compile 의 대상은 header 파일이 아니라 Source 파일이다. 
    (Compiler 수업을 좋은 성적에 클리어 했는데 벌써 긴가민가....)
2. Header 파일에 변수를 선언 할 수 없다.
   선언하면 다음과 같은 에러 메시지가 출력된다.
   error LNK2005: "int a" (?a@@3HA) already defined in ManagerClient.obj





출처 : http://six605.tistory.com/84