non c'è più l'uso come indicato nel tuo esempio, ma matrice di dimensione pari a zero s sono stati spesso utilizzati nelle strutture dove l'ultimo elemento è stato dinamicamente dimensioni:
struct {
int some_fixed_data [N_FIXED];
float more_fixed_size_data [F_FIXED];
int n_variable_elements;
long variable_elements [0]; // allocated based on item above
} s;
int curlen = sizeof s + sizeof long * s.n_variable_elements;
L'utilizzo di una matrice di lunghezza zero è:
1) variable_elements
ha un indirizzo (nonostante risposta di qualcuno)
2) ha anche semantica matrice
3) calcolare la dimensione dinamica della matrice è semplificata
Sfortunatamente, alcuni compilatori (MSC) getterebbe un attacco sibilante su una tale costruzione e forzare un minore, calmare, tecnicamente corretto riformulazione:
struct {
int some_fixed_data [N_FIXED];
float more_fixed_size_data [F_FIXED];
int n_variable_elements;
long variable_elements [1]; // allocated based on item above
} s;
int curlen = sizeof s + sizeof long + (s.n_variable_elements - 1);
Pensare a un array di dimensioni zero come segnaposto. Non è più necessario farlo, a meno che non si sia costretti a utilizzare C
, come in molti ambienti incorporati.
non sta dando errore nel compilatore gcc ubuntu 10.04 –
@ user1044137: Ci sono molti, molti, molti modi per scrivere sia i programmi C che C++ che sono mal formati e per i quali non si riceve alcuna diagnosi. Del resto, il mio GCC dice "attenzione: ISO C++ proibisce l'array a dimensione zero". Dovresti sempre abilitare tutti gli avvertimenti. –
Perché stai compilando un programma ** C ** da una domanda ** C ** con un compilatore ** C++ ** e postando un estratto standard ** C++ **? – sidyll