336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

MS의 구조체 중에는 첫번째 인자가 구조체의 사이즈인 경우가 많습니다. 
흔히 사용하는 CreateProcess의 STARTUPINFO구조체를 예로 들자면... 

STARTUPINFO StartupInfo; 
ZeroMemory(&StartupInfo, sizeof(STARTUPINFO)); 
StartupInfo.cb = sizeof(STARTUPINFO);
 

이런 식의 코드로 초기화하는 경우가 많죠. 
이걸 한 줄로 쓸 수 있습니다. 

STARTUPINFO StartupInfo = { sizeof(STARTUPINFO) }; 
이렇게 쓰면 되죠. 멋있죠? 

STARTUPINFO si = { sizeof(si) }; 
이렇게 써도 됩니다. 

왜 이게 가능하냐면... 
C나 C++이 배열이나 구조체를 초기화하는 것이 가능합니다. 
그런데 중간까지만 초기화를 하면 나머지는 자동으로 0으로 됩니다. 
물론 위의 코드는 첫번째 인자가 cbSize인 경우에만 가능하겠죠. 
(그러니까... MS의 사이즈 쓰는 구조체는 거의 다 될겁니다.) 
위처럼 구조체에 사용하셔도 되고, 배열도 마찬가지로 일부만 초기화하면 나머지가 0이 됩니다. 

참고로 CHARFORMAT2에 대해서 사용했더니 안되더군요. 

struct CHARFORMAT2A : _charformat 

  WORD wWeight; 
  SHORT sSpacing; 
  COLORREF crBackColor; 
  LCID lcid; 
  DWORD dwReserved; 
  SHORT sStyle; 
  WORD wKerning; 
  BYTE bUnderlineType; 
  BYTE bAnimation; 
  BYTE bRevAuthor; 
};
 

CHARFORMAT2가 c++에서는 CHARFORMAT를 계승한 클래스로 정의되기 때문입니다. 다음과 같은 에러가 나죠. 
error C2552: cf : non-aggregates cannot be initialized with initializer list 

ps. 또는 구조체를 계승하고 생성자에서 첫번째 인자를 채워주는 클래스를 만들기도 하지요. 이것도 꽤 폼납니다. ^^

'Programming > C / C++' 카테고리의 다른 글

가변 인수  (0) 2015.02.07
STL without warnings  (0) 2015.02.07
자료형의 종류와 범위  (0) 2015.02.07
__IN & __OUT  (0) 2015.02.07
strncpy 의 함정  (0) 2015.02.07
Posted by 역시인생한방
,