2009-06-28 9 views
6

Creo que mi pregunta es si el siguiente es C válidamatrices de tamaño variable en C

int main(void) { 
    int r = 3; 
    int k[r]; 
    return 0; 
} 

Si es así, sería alguien cuidado para explicar por qué no funciona en el compilador de C de Microsoft, pero en GCC, y cuando se agregó al estándar C

Gracias

Respuesta

3

Es una extensión de GCC que la corriente MSVC no soporta. Se puede reemplazar en MSVC con bastante facilidad con un _alloca (una asignación de pila que no requiere ninguna cancelación de asignación manual por parte del programador):

#include <malloc.h> 

... 

int *k = (int *)_alloca(sizeof(*k)*r); 
+4

Era una extensión de GCC, pero fue codificado en C99. MSVC de hecho no lo admite aún. Tenga en cuenta también que en Linux, es alloca(), no _alloca, y está en bdonlan

+2

Se ha estandarizado durante 10 años ... –

+0

Siempre lo he usado, pero no he obtenido el error hasta que usé Windows esto borra mi confusión – adk

13

Es en C99. MSVC solo es compatible con C89.

9

El C99 standard añadió matrices de longitud variable, pero otros vendedores tales como GCC ellos añadió mucho antes.

4

Siento que esto no es una respuesta, pero me gustaría para señalar un problema potencial con el uso de matrices de longitud variable. La mayor parte del código que he encontrado se ve así.

void foo(int n) 
{ 
    int bar[n]; 
    . 
    . 
} 

No se ha comprobado ningún error explícito aquí. Un gran n puede causar problemas fácilmente.

0

Es una extensión de GCC que la corriente MSVC no soporta. Se puede reemplazar en MSVC con bastante facilidad con un _alloca (una asignación de pila que no requiere ninguna cancelación de asignación manual por parte del programador)

sí, pero está limitado a 1 MB

Cuestiones relacionadas