C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[419] 쉽게 구조체를 초기화 하는 방법.
김태선 [jsdkts] 10525 읽음    2004-02-02 15:33
구조체는 프로그램에서 아주 많이 쓰는데 이를 초기화 해야 할 경우가 많습니다.

가령

void  Procedure(...)
{
  tagUSER  user;

  보통 0로 초기화 할때..
  ZeroMemory(&user, sizeof(tagUSER));
  식으로 많이 쓰죠.
 
  그런데 이렇게 한줄에 처리하는 방법도 있더군요.

  tagUSER user = { 0, };
 
  이러면 컴파일러가 알아서 나머지 항목을 0으로 다 넣어줍니다.
  물론 위 예에서는 tagUSER 구조의 첫번째 항목은 0으로 초기화 될수 있는 것이어야 하겠죠.
  C++Builder, VC++ 다 지원합니다.

  구조체중에 몇가지 항목을 0으로 초기화 시키기 위한 코드를 몇줄 더 늘이는 일이 없어지겠죠. ^^;

}
빈센트 [kaisar]   2004-02-05 10:02 X
그런 방법도 있었군요..
비밀 [roseria]   2004-02-14 21:36 X
제가 아는바로는 memset이나 Zeromemory를 이용한 것은 프로그램이 실행되고 해당 함수가 호출되어서 초기화를 시킵니다. 그런데 위의 방법은 컴파일러에 의해 정적으로 초기화 하는 방법입니다. 그리고, BC++에서는 어찌될지 모르지만 ... 구조체를 아주 크게 잡은 다음 위와 같은 방법의 초기화루틴을 작성하시고 빌드시켜보세요, 그리고, 빌드된 실행파일의 크기를 살펴보세요.
유광희 [yurchi]   2004-04-14 15:59 X
  맞아요.
char a[1024 * 1024 * 1024] = {0x00, }
해보세요.
.EXE 파일 사이즈을 보는 순간 미쳐버릴 겁니다.
아주 적은 용량일때만 유용하죠~ ^^
유광희 [yurchi]   2004-04-14 16:03 X
헉 위 코드 해보니깐 .exe 를 생성을 못하는군요 -.-
char a[1024 * 1024 * 10] = {0x00, }  이렇게만 해보세요
10메가가 부쩍 늘어납니다.

구조체에 이렇게 큰 배열을 넣을 일은 없을테니, 위에 본론에 맞게 알맞게 사용하세요~
왕다솜 [dasom]   2004-06-11 14:49 X
배열도 되는 걸로 알고 있습니다.
int a[10] = {0};

근데 님 방법보단 선언과 동시에 초기화가 가능한 걸로 알고 있습니다.
씨언어에서 하듯이어여..근데 ㅆ++에선 구조체도 하나의 public 클래스이기 때문에 내포형식으로 들어가는 구조체는 안되는 걸로 알고 있습니다 (순 제 생각)

선언과 동시에 초기화하는 클래스
struct tag {
      int a;
      char a*;
} NAME = { 0, "왕다솜"};

+ -

관련 글 리스트
419 쉽게 구조체를 초기화 하는 방법. 김태선 10525 2004/02/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.