C99 (c programlama dili standartı için resmi olmayan bir ad), diziyi hemen boyutlandırabilmek için bir özellik ekledi ve bu özelliği herkesin seveceğini düşündüler fakat hiç de öyle olmadı. Resmi terim Variable-Length Array kısaca VLA, yani Değişken Uzunluklu Dizi.
Gözlemlerime göre bir diziyi dinamik olarak ayırmak yerine, çoğu coder diziyi programın çalışma sırasında değiştirebilmeyi ister. Misal, name[32] diye bir dizi oluşturdunuz ve kodu çalıştırdığınız sırada 4 bayta daha ihtiyacınız var. Dizi adını "realloc" komutu ile name[36] yapabilirsiniz. Bu bence bazı coder'ların minnettar kalacağı bir özellik ama anında dizi ayırma??!
Değişken uzunluklu diziyi uygulamanın bir yolu, dizi boyutunu aşağıdaki kodda yapıldığı gibi değişken olarak belirtmektir.
Kod:
[COLOR="Blue"][FONT="Courier New"]#include <stdio.h>
v0id array(int size)
{
char alpha[size];
int x = 0;
while(x < size)
{
alpha[x] = 'A' + x;
putchar(alpha[x]);
x++;
if( x > 26 )
break;
}
putchar('\n');
}
int main()
{
array(5);
array(20);
array(9);
return(0);
}[/FONT][/COLOR]
Array() fonksiyonu, size değişkenine dayanarak alpha[] dizisinin boyutunu ayarlar. Geçirilen değere bağlı olarak dizi, alfabenin büyük harfleriyle çeşitli derecelere kadar doldurulur. Çıktısı:
ABCDE
ABCDEFGHIJKLMNOPQRST
ABCDEFGHI
Her çağrılışta, alpha[] dizisinin boyutu farklı olur. Değişken boyutlu dizi kullanmayan benzer bir fonksiyon uygulamaya çalışmadım, ama fonksiyondaki bir yığın belleği ayırması kolay ve aynı çıktılı olurdu. Yani kısaca VLA yapılabilir, ama kesinlikle gerekli değildir.
VLA Wikipedia sayfasında yazdığı üzere Linus Torvalds bu konu hakkında şöyle demiştir:
"VLA KULLANMAK BİLFİİL APTALLIKTIR: Sabit bir anahtar boyutu kullanmaktan hem daha fazla hem daha yavaş hem de daha narin kod oluşturur"
Torvalds devamında Linux'un VLA içermediğini ve bundan dolayı gururlu olduğunu söylüyor. VLA'lerde demo kod kıtlığı ve C eğitim dünyasında daha da az materyal olduğunu gördüm. Bu yüzden, Torvalds'ın fikrine katılıyorum.
C'de bir VLA oluşturmak mümkündür. Sadece gerek değil ve şahsen kullanmaktan da kaçınmanızı önerdiğim bir şeydir.
Moderatör tarafında düzenlendi: