no hay mucho uso como se da en el ejemplo, pero matriz de tamaño cero s se utilizan con frecuencia en estructuras en las que el último elemento se dinámicamente dimensionado:
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;
El uso de una matriz de longitud cero es:
1) variable_elements
tiene una dirección (a pesar de la respuesta de alguien)
2) también tiene la semántica de matriz
3) calcular el tamaño dinámico de la matriz se simplifica
Desafortunadamente, algunos compiladores (MSC) habría lanzar un ajuste hissy más de una construcción tal y forzar una menor medida, apaciguar, técnicamente incorrecto reformulación:
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);
Think de una matriz de tamaño cero como un marcador de posición. Ya no hay necesidad de hacer eso, a menos que esté obligado a usar C
, que es el caso en muchos entornos integrados.
no está dando error en el compilador de gcc ubuntu 10.04 –
@ user1044137: Hay muchas, muchas, muchas maneras de escribir tanto en C como en C++ programas que están mal formados y para los que no recibe ningún diagnóstico. Para el caso, mi GCC dice 'advertencia: ISO C++ prohíbe la matriz de tamaño cero'. Siempre debes habilitar todas las advertencias. –
¿Por qué está compilando un programa ** C ** de una pregunta ** C ** con un compilador ** C++ ** y publicando un extracto estándar ** C++ **? – sidyll