SORU
24 HAZİRAN 2010, PERŞEMBE


Switch deyimi: varsayılan son olay değil mi?

switch aşağıdaki ifadeyi düşünün:

switch( value )
{
  case 1:
    return 1;
  default:
    value  ;
    // fall-through
  case 2:
    return value * 2;
}

Bu kodu derler, ama bu geçerli (= tanımlı davranış) C90/C99 için mi? Hiç bir kod gördümvarsayılanson durum böyle değildir.

DÜZENLEME:
GibiJon CageveKillianDSbu gerçekten çirkin ve kafa karıştırıcı kod ve ben de çok iyi biliyorum. yazmak: Sadece genel sözdizimi (tanımlı mı?) merak ediyorum ve beklenen çıktı.

CEVAP
24 HAZİRAN 2010, PERŞEMBE


C99 standardı bu konuda açık değil, ama birlikte tüm gerçekleri alarak, son derece geçerli.

case default etiket goto etiket eşdeğerdir. 6.8.1 Etiketli tablolara bakın. Özellikle ilginç zaten söz konusu Duff Aygıtı sağlayan 6.8.1.4,:

Herhangi bir açıklama konmuş olabilir bir tanımlayıcı olarak ilan önek etiket adı. Kendilerini etiket yap kontrol akışını değiştirmek, devam ediyor onları genelinde engelsiz.

Edit: Bir geçiş kodu içinde özel bir şey yok; if-deyimi gibi kod normal bir blok, ek atlama etiketleri ile. Bu sonbahar-davranış ve break neden gerekli olduğunu açıklar.

6.8.4.2.7 hatta bir örnek verir:

switch (expr) 
{ 
    int i = 4; 
    f(i); 
case 0: 
    i=17; 
    /*falls through into default code */ 
default: 
    printf("%d\n", i); 
} 

Yapay programın parçası olarak ben olan bir nesne var otomatik depolama süresi ile (blok içinde) ama asla başlatıldı, ve böylece eğer kontrol ifadesi bir sıfır var değer, printf işlevi çağrısı erişim belirsiz bir değeri olacak. Benzer şekilde, işlevi çağrısı f ulaşılamıyor.

Case sabitleri bir switch deyimi içinde benzersiz olmalıdır:

6.8.4.2.3 etiket tamsayı sabit olmalıdır her durumda ifade ve bu durumda iki ifade yok aynı sabit ifade anahtarı ifade eder dönüşüm sonra değer. Olabilir anahtarı En bir varsayılan etiket açıklama.

Durumlar değerlendirilir, sonra verilirse varsayılan etiket atlar,:

6.8.4.2.5 promosyonlar kontrolünde gerçekleştirilen tamsayı ifade. Sürekli ifade her durumda etiket dönüştürülür kontrol tipi terfi ifade. Dönüştürülmüş bir değer bu terfi. kontrol ifadesi, kontrol atlar aşağıdaki deyimi eşleşen case etiketi. Eğer varsa aksi takdirde, bir varsayılan etiket, kontrol atlar açıklama etiketli. Eğer dönüştürülürse yok sürekli ifade maçlar dava ve varsayılan etiket, hiçbir parçası yok anahtarı vücut yürütülür.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Chip Johnson

    Chip Johnson

    30 AĞUSTOS 2007
  • multimediaGEEKS LLC

    multimediaGE

    3 Mayıs 2010
  • Strata1000

    Strata1000

    28 EYLÜL 2009