3. Encontré por casualidad un código que declara
una estructura de la siguiente manera:
struct name {
int namelen;
char
namestr[1];
};
Y
luego hacen una reserva de memoria extraña para hacer que
namestr actúe como si tuviera varios elementos. ¿Esto
es legal o portable?
Esta
técnica es popular. Oficialmente se considera que esto
no se ajusta al Estándar de C. Por lo tanto, no tiene porque
ser portable.
Seguramente,
si lo compilas en compiladores que comprueban la dimensión
del array, obtendrás los correspondientes warnings y errores.
Otra
posibilidad es declarar el array de tamaño variable muy
grande, mejor que muy pequeño. No obstante, sigue sin cumplir
el estándar.
.
.