Además de los puntos discutidos ya-de cuando exactamente se libera el espacio, y si el constructo está soportada en absoluto, también hay esto:
- En el caso
alloca
, bytes
tiene un tipo de puntero.
- En el caso
[]
, bytes
tiene un tipo de matriz.
La diferencia más notable está en lo que sizeof(bytes)
es; para un puntero es el tamaño del puntero (sizeof(void *)
) mientras que para una matriz es el tamaño del espacio asignado (sizeof(char) * size
, que = size
para este caso desde sizeof(char)
= 1).
(también, en su ejemplo, los tipos de elementos son diferentes;. A ser el mismo, el primero se debe cambiar a char *bytes = alloca(size)
)
La respuesta depende críticamente de si 'size' es una constante en tiempo de compilación. ¿Lo es? – AnT
no, el tamaño es, para todos los efectos, un argumento para la función –
Eso no importa. Apple, por defecto, usa '--std = gnu99' que admite ambos. 'alloca()' es una extensión de GNU, y la matriz de longitud variable es una característica C99 que cumple con los estándares. –