2012-02-08 15 views
5

WinNT.h'de bulunan ANYSIZE_ARRAY'un amacı nedir?<winnt.h>'da ANYSIZE_ARRAY amacı nedir?

2004'ten bu yana bir MSDN blog yazısı görüyorum ama bana mantıklı gelmiyor. this page kaynaktan

+0

Lütfen MSDN blog gönderisine bağlantı veriniz? –

+0

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

cevap

5

this blog post hakkında konuşuyorsunuzdur.

Genellikle bir değişken büyüklükte (derleme zamanında bilinmeyen) dizi bir yapı parçası olduğunda kullanılır:

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

bu yapılarla çalışmak için, genellikle ilk boyutunu almak için istenen apı'sini veri, daha sonra büyük bir bellek bloğu tahsis ve nihayet veriyi doldurabilmesi için tekrar aynı API'yi çağırın ...

+0

Teşekkürler - neden bunu bağlantılı bir liste üzerinden kullanıyorsunuz? – jglouie

+1

@LemonBeagle Bağlantılı bir liste daha fazla bellek gerektirir ve/veya API uygulaması bir dizideki öğeleri zaten içeriyor olabilir ve yalnızca arayanlar arabelleğine kaydedebilir. Ayrıca öğelerin listesini yürümek için daha yavaştır ve her bir öğeyi boşaltmanız yeterlidir ve sadece büyük bir arabellek değil ... – Anders

1

: C

, değişken boyutlu dizi ANYSIZE_ARRAY1 olarak tanımlanır a[1] veya a[ANYSIZE_ARRAY] olarak bildirilmiştir. Daha sonra büyük gibi kullanılır.