C'de Değişken Uzunluklu Diziler (VLA) // [R4V3N-dRose98]

R4V3N

Adanmış Üye
3 Tem 2016
6,250
38
25
Kocaeli

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:
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.