2012-02-08 10 views
5

ANYSIZE_ARRAY의 목적은 WinNT.h에 있습니다.ANYSIZE_ARRAY의 목적은 <winnt.h>입니까?

2004 년부터 MSDN 블로그 게시물을 보았지만 나에게 의미가 없습니다. this page 가입일

+0

MSDN 블로그 게시물에 대한 링크를 제공해주십시오. –

+0

@Agnel http://blogs.msdn.com/b/oldnewthing/archive/2004/08/26/220873.aspx – jglouie

답변

5

나는 this blog post에 대해 이야기하고 있다고 가정합니다.

종종 변수 크기 (컴파일 타임에 알 수없는) 배열 구조체의 일부입니다 때 사용됩니다

typedef struct { 
    int CommonFlags 
    int CountOfThings; 
    THING Things[ANYSIZE_ARRAY]; //Things[1]; 
} THINGSANDFLAGS; 

그 구조 작업을하려면 자주 최초의 크기를 얻기 위해 원하는 API를 호출 데이터를 할당 한 다음 충분히 큰 메모리 블록을 할당하고 마지막으로 동일한 API를 다시 호출하여 데이터를 채울 수 있습니다.

+0

감사합니다 - 왜 이것을 연결된 목록을 통해 사용합니까? – jglouie

+1

@LemonBeagle 연결된 목록에 더 많은 메모리가 필요하며 API 구현에 이미 내부적으로 배열의 항목이있을 수 있으며 호출자 버퍼에 memcpy 만있을 수 있습니다. 또한 항목 목록을 이동하는 것이 더 느리고 큰 버퍼가 아닌 각 항목을 해제해야합니다. – Anders

1

: C에서

는 가변 크기 어레이가 ANYSIZE_ARRAY1로 정의 a[1] 또는 a[ANYSIZE_ARRAY]로 선언된다. 그런 다음 더 큰 것처럼 사용됩니다.