Afish pisze:W C11 jest opcjonalne.
Tylko po to, aby móc zachować zgodność wsteczną z C99.
Afish pisze:Standard de jure nie, ale standard de facto starszy od C89 tak, K&R.
Odpowiedniejsze słowo to dokumentacja (która potem się przerodziła w coś ala standard, ale nim nie jest
per se).
Afish pisze:Rozszerzenia GCC lub przypadek (że działało). — w C++ nie ma VLA, a ten kod się kompiluje i nie wysypuje Ideone.
VLA zawsze było rozszerzeniem w GCC i zostało potem zaimplementowane w C99 (co było błędem). Przypadków nie ma. Ten kod się kompiluje dlatego, że wybrałeś akurat g++ tam. Jakby dodać flagę
-pedantic
to by wywaliło warning.-- 7 mar 2017, o 12:55 --
miki999 pisze:Czyli chcąc wziąć np. piąty element tej tablicy, musisz napisać (*ptr)[5]
Nieprawda
miki999 pisze:Pamiętasz pewnie, że każdy wskaźnik jest rozmiaru inta
Nieprawda. Rozmiar wskaźnika zależy od architektury i jej implementacji, a nie jest równy intowi.
Ewentualnie jest coś takiego jak
intptr_t
.
miki999 pisze:nie skaczesz po tablicy charów a po tablicy wskaźników na tablice
Raczej:
tablicy wskaźników na char
miki999 pisze:Chociaż prawda, że VLA (variable length array) może nie być wspierane przez kompilator, ale gdy jeden wymiar jest stały, to zgodność jest zapewniona.
Nieprawda.
To jest VLA w C (w C++ już nie).