2013-04-30 2 views
15

Windows API를 처음 살펴보고 WNDCLASSX이 발생하면 왜 cbSize 인 지 궁금해 할 수 없습니다. cbSize에 대한 설명 (MSDN 당) : 이 구조체의 크기 (바이트). 이 멤버를 sizeof (WNDCLASSEX)로 설정합니다. GetClassInfoEx 함수를 호출하기 전에이 멤버를 설정해야합니다. 이것은 그것을 묘사하고 그 목적을 암시하지만, 필자는 그 필요성을 배제하지 않는다.구조체가 자체 크기를 저장하는 이유는 무엇입니까?

제 질문은 이것입니다 : 구조체가 왜 자체 크기를 저장할 필요가 있습니까? 구조체를 처리하는 함수가 sizeof을 사용하여 해당 정보에 액세스하지 않았습니까?

+0

내 추측 : 설득력. 또한 효율면에서 sizeof를 한 번 실행하고 저장 한 다음 계속해서 sizeof를 실행하는 것보다 훨씬 효율적입니다. –

+1

'do_something_with ((struct foo *) i_am_a_bar_ptr); –

+0

버전 지원 및 기계 플랫폼은 두 가지 공통된 이유가 있습니다. – WhozCraig

답변

22

Windows API의 최신 버전은 구조체에 새 필드를 추가 할 수 있습니다. 구조체에 크기가 있으면 이전 코드가 API 함수를 호출 할 수 있습니다. API 함수는 이전 코드가 인식하는 필드 만 복사합니다.

+7

아마도 이번 WinAPI에서 뭔가 올바르게 수행했습니다. :) –