Inizializzazione struct in C con errore:espressione prevista

Inizializzazione struct in C con errore:espressione prevista

Non funziona, perché C non sa di che tipo dovrebbe essere {3, "tre"}; C non guarda il lato sinistro dell'operatore "=" per indovinare il tuo tipo, quindi non hai alcuna informazione sul tipo lì. Con C99 puoi usare un letterale composto per questo:

three = (struct foobar) { 3, "three" };

Il cast fornisce il tipo, i valori tra parentesi graffe l'inizializzatore. Il risultato viene quindi assegnato alla tua variabile tre.


"inizializzazione" e "assegnazione", sebbene abbiano una sintassi abbastanza simile, sono due cose diverse con restrizioni diverse.

"Inizializzazione" significa definire il valore iniziale di una variabile proprio nel corso della definizione della variabile. L'assegnazione, al contrario, assegna un valore a una variabile definita altrove nel programma.

C non supporta l'assegnazione di valori alle variabili di tipo struct o array , ma supporta l'inizializzazione di variabili di questo tipo:

struct foobar three = {3, "three"} è un'inizializzazione, poiché il valore è definito insieme alla definizione della variabile. Questo è supportato in C e in C++.

struct foobar three; three = {3, "three"} al contrario, è un'assegnazione, perché la variabile viene prima dichiarata, ma il valore viene assegnato in un'istruzione separata. Questo non è supportato in C, ma sarebbe supportato in C++.