Dziś się dowiedziałem o VLA i mój świat legł w gruzach
Jeszcze do wczoraj widząc coś takiego:
#include<stdio.h>
#include<stdlib.h>
int main() {
int i;
int array_size;
scanf("%d", &array_size);
int iTable[array_size];
for (i = 0; i < array_size; i++)
iTable[i] = i * i;
for (i = 0; i < array_size; i++)
printf("%dn", iTable[i]);
return 0;
}
Wczoraj Powiedziałbym:
Co to ma być? Przecież się nie skompiluje, ponieważ rozmiar tablicy jest definiowany w czasie działania programu, tak nie można. Nie czytałeś Symfoni C++ Grębosza? Na stronie 128 [1] masz napisane o tym.
Dziś powiem:
Skompiluje ci się tylko z kompilatorem wykorzystującym standard C99. Czyli będzie działać bez problemu na kompilatorze GCC, ale na Visual Studio już nie.
[1] Tom 1, piąte wydanie, stara wersja, przed ISO
Pokazany program korzysta z Variable-length array jednej w funkcjonalności którą daje nowy standard C99.
Zanim doszedłem do tego, że to część C99 umieściłem pytanie na stackoverflow.com, pytanie dotyczy kodu napisanego dla C++, ale korzysta z tej samej zasady co kod napisany na początku posta.
To niesamowite, że tak stare języki (pojawił się w 1973, 38 lat temu) jak C nadal się rozwijają stale powiększając swoje możliwości.
Visual Studio zawiesił wsparcie dla języka C argumentując to tym, że mało osób korzysta z języka C. Skupiając uwagę nad rozwojem języka C++ oraz standardu C++0x.
I na koniec lekcja na resztę życia:
Technologi o nazwie X nigdy nie nauczysz się w całości, jedynie można próbować każdego dnia.
Spostrzegawczym powiem, że wczoraj to nie 'wczoraj’ ponieważ, planuje dzień publikacji posta 🙂