2009-04-18 16 views

risposta

2

Prova questo link.

L'idea è di poter fare riferimento a membri di un tipo complesso come la struttura durante l'inizializzazione. Per esempio.

struct s { 
    int a, b; 
}; 

int main() { 
    struct s = { .b = 42, .a = -42 }; 
    return 0; 
} 

La flessibilità si ottiene dall'essere indipendente dall'ordine quando si specificano i valori. Ricorda che questo è stato aggiunto allo standard C99 e potrebbe non essere supportato dai compilatori che non supportano completamente C99 (o supportano una versione precedente dello standard).

8

Se si utilizza un elenco initialiser convenzionale, i valori per gli elementi vengono assegnati in ordine, quindi se avete questa struct:

typedef struct _foo { 
    int a; 
    int b; 
} foo_t; 

allora questo initialiser assegna esplicitamente a e non b:

foo_t value = { 7 }; 

senza inizializzatori designati, gli unici elementi che possono essere omessi sono quelli dichiarati alla fine

usi ng inizializzatori designati, è possibile omettere gli elementi che vengono dichiarati ovunque:

foo_t value = { .b = 8 }; 

in modo che l'initialiser per value.a viene omesso, nonostante sia il primo valore nella struct.

Problemi correlati