2008-12-12 22 views
5

Ben şuna benzer, diğer bir yapıdaki bir dizi içeren bir yapıya sahiptir. Bir modülün açıklaması olarak tasarlanmıştır. Ben c99 bileşik değişmez değerler ile bunu yapmaya çalıştı, ama derleyici (gcc) beğenmedim:İçiçe yapılar/diziler başlatma


Bla test = 
{ 
    0, (Point[]) {(Point){1, 2}, (Point){3, 4}} 
}; 

Ben aşağıdaki hataları alıyorum: Ben değiştirmek gerekmez yana

 
error: initializer element is not constant 
error: (near initialization for 'test') 

gerektiği kadar çok "const" koyabilirim. Derlemek için bir yolu var mı?

cevap

5

sadece tek bir bileşik değişmezi dizi oluşturmak, her element için değişmez bir bileşik gerekmez:

Bla test = 
{ 
    0, (Point[]) {{1, 2}, {3, 4}} 
}; 

Eğer -std=c99 ile derleme emin olun.

+0

Bu, iki nokta için belleği dinamik olarak ayırıyor mu? – aib

+0

@aib: Evet, iki tam anlamıyla bir "nokta" yapı dizisi oluşturur (dosya kapsamından beri statik depolama süresi vardır) ve "test" in "foo" üyesini işaret eder. Bir diziyi ayrı ayrı tanımlamak ve "foo" üyesini işaret etmekle eşdeğer bir kısayoldur. –