SORU
20 EKİM 2009, Salı


C ilan, başlatılmamış bir değişken ne olur? Bir değeri var mı?

Soru-- C yazarsam hızlı:

int num;

Ben atamadan önce bir şey num num değeri belirsiz.

CEVAP
20 EKİM 2009, Salı


Statik değişkenler (kapsam dosya ve statik fonksiyon) sıfır olarak başlatılır:

int x; // zero
int y = 0; // also zero

void foo() {
    static int x; // also zero
}

Non-statik değişkenler (yerel değişkenler)belirsiz. Bir değer atamak için önce onlara okuma tanımsız davranış oluşur.

void foo() {
    int x;
    printf("%d", x); // the compiler is free to crash here
}

Pratikte, bir eğilim sadece bazı anlamsız değer; ilk başta bazı Derleyiciler bile koymak belirli, sabit değerler için belli zaman isteyen bir hata ayıklayıcı - ama açık konuşmak gerekirse, derleyici ücretsiz bir şey yapmak için gelen sesiyle çağırma demons through your nasal passages.

Tanımsız davranış "yerine, çeşitli türleri için. onların temsil ek bayrak bit İŞLEMCİ mimarisi vardır" tanımsız/rastgele değer, sadece neden olarak Modern bir örnek tabii ki the Itanium, which has a "Not a Thing" bit in its registers; standart hazırlayanlar bazı eski mimarileri dikkate alındı C olurdu.

Bu bayrak biti set değeri ile çalışmak için çalışıyor, bir işlem CPU bir özel durum neden olabilirgerçektengerekmiyor başarısız (örneğin, tamsayı toplama, ya da başka bir değişken atama). Ve eğer bir değişken başlatılmamış gidersen bırak, derleyici bu bayrak biti set ile bazı rasgele çöp - başlatılmamış değişken ölümcül olabilir dokunmadan anlamını yakalar.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Capcom Unity

    Capcom Unity

    5 NİSAN 2010
  • MaximumPCMag

    MaximumPCMag

    23 Temmuz 2010
  • YouChewBu

    YouChewBu

    26 Ocak 2009