¿Extraño código C – arrays dynamics?

Tengo un poco de código copiado de una fuente desconocida:

int Len=0; printf("Please input the length of vector"); scanf("%d",&Len); float x[Len],y[Len],sig[Len]; 

Ahora normalmente creo que las matrices no pueden inicializarse durante el tiempo de ejecución con una variable. Sin embargo, esto supuestamente comstack. El problema es que de nuevo no conozco el comstackdor. ¿Hay una variante de C donde esto es legal? El comstackdor que estoy usando, IAR C, no me gusta.

También estoy viendo matrices indexadas de 1 en lugar de 0, lo que sugiere que esto se traduce de algo parecido a Pascal originalmente. ¿Alguna opinión?

Ahora normalmente creo que las matrices no pueden inicializarse durante el tiempo de ejecución con una variable.

Eso ha sido cierto antes del estándar C99. También es ilegal en C ++ (aunque algunos comstackdores, como gcc, ofrecen esto como una extensión).

¿Hay una variante de C donde esto es legal?

Cualquier comstackdor C99 servirá.

También estoy viendo matrices indexadas de 1 en lugar de 0

Esto también está bien, siempre y cuando esté bien asignando un elemento adicional y no utilice el elemento en el índice cero.

Nota: dado que acceder a un elemento más allá del final de una matriz es un comportamiento indefinido, puede parecer que un progtwig no válido funciona y produce el resultado deseado en sus ejecuciones de prueba. Si sospecha que algunos índices de matriz pueden estar desactivados en uno, considere ejecutar su progtwig bajo un generador de perfiles de memoria, como valgrind, para ver si el progtwig tiene errores ocultos relacionados con el acceso a memoria no válida.

Esta fue una característica introducida en C99 y se llama VLAs (Variable Length Arrays). Estas matrices también se indexan comenzando desde 0 no 1 y terminando en longitud-1 ( Len-1 en su caso) al igual que una matriz normal.

En C99 esto es válido y se llama VLA-Array.

Esto se llama una matriz de longitud variable (VLA) y es una característica de C99.

Si su comstackdor no lo reconoce solo, intente cambiar los estándares C

Tratar:

 --std=c99 -std=c99 --std=gnu99 -std=gnu99 

La página de manual de su comstackdor podrá indicarle la bandera exacta.