2015-10-12 26 views
14

Sadece st terminal emulator içinde some code okuma ve bu sözdizimi geldi edildi:C de [foo] = bar ne anlama geliyor?

static void (*handler[LASTEvent])(XEvent *) = { 
    [KeyPress] = kpress, 
    [ClientMessage] = cmessage, 
    /* Removed some lines for brevity ... */ 
}; 

Ben C bu sözdizimini görmedim ve ben google ne bile emin değilim. Ne yaptığı konusunda kaba bir fikrim var (işleyiciyi bir dizi işlev işaretçisi olarak tanımlama), ancak bu sözdizimini daha iyi anlamak istiyorum. En azından C99'da geçerli gibi görünüyor, fakat bunun neden doğru olduğunu, tam olarak nasıl çalıştığını ve belki de bu sözdiziminin tanımlandığı C standardına bir işaretçi bulmaya çalışıyorum.

+0

yazdırır. –

cevap

13

Bu, enum dizinleriyle bir dizi işlev işaretçisi başlatılıyor. Bakınız here.

Aşağıdaki yorumlarda belirtildiği gibi Designated Initializers kullanır. Bu kısa örnek nasıl kullanılabileceğini göstermelidir.

enum indexes {ZERO, ONE, TWO, FOUR=4}; 
int array[5] = {[FOUR]=1, [TWO]=9}; 

for(int i = 0; i < 5; i++) 
    printf("%d, ", array[i]); 

Bu benim bir tahminde olsaydı, bazı dizinlenmiş dizi başlatma gibi görünen

0, 0, 9, 0, 1, 
+2

@Ianoxx C standardına bir işaretçi istedi. "Belirlenen başlatıcılar", paragraf 6.7.8 Madde 17'de açıklanmıştır. Özel örnek, ÖRNEK 9'dur. –