SORU
31 EKİM 2008, Cuma


Neden switch deyimi bir mola ihtiyacı için tasarlanmıştır?

Basit anahtar bir röportaj verdi

switch (int)
{
    case 1 :
    {
        printf("1\n");
        break;
    }

    case 2 : 
    {
        printf("2\n");
    }

    case 3 : 
    {
        printf("3\n");
    }
}

2, yürütme anlamına gelir diye aradan bir açıklama olmaması durumunda 3 için kod içinde devam edecektir. Bu bir kaza değil, bu şekilde tasarlanmıştır. Neden bu karar verildi? Yararı bu semantik bir otomatik kesme blok için sahip vs ne sağlar? Gerekçesi neydi?

CEVAP
31 EKİM 2008, Cuma


Birçok cevap olarak sonbaharda yoluyla taşımak gibi görünüyornedenibreak açıklama gerektiren için.

Sadece bir hata, büyük ölçüde C bu yapıları nasıl kullanılacağı ile neredeyse kadar deneyimi yoktu tasarlarken nedeniyle olduğuna inanıyorum.

Peter Van der Linden adlı kitabında iddia ediyor"": . Uzman C Programlama

Güneş C derleyici kaynakları inceledik varsayılan düşmek görmek üzerinden kullanıldı. C Güneş ANSI derleyici ön uç 244 anahtarı vardır her açıklamaları, bir yedi olgunun ortalama. Düşmek tüm bu vakaların %3'ü sadece oluşur.

Diğer bir deyişle, normal anahtarı davranıştıryanlış% 97 oranında. Sadece bir derleyici değil - nerede sonbahar boyunca kullanıldı aykırı bu analiz genellikle içindi daha sık oluştuğu durumlar bir derleyici başka bir yazılım daha, operatörler derlerken mesela bu bir ya da iki alabilir işlenen:

switch (operator->num_of_operands) {
    case 2: process_operand( operator->operand_2);
              /* FALLTHRU */

    case 1: process_operand( operator->operand_1);
    break;
}

Durum çok yaygın güz var olan bir kusur olarak kabul özel bir yorum bile Kongre, yukarıda gösterilen, tüysüz "bu olduğunu söyler vakaların %3'lük bir tane gerçekten sonbahar ile istediği oldu."

Bence iyi bir fikir için C# gerektirir, açık bir atlama deyimi sonunda her durumda blok (ise hala izin birden fazla kutuları için yığılmış sürece sadece tek bir blok deyimleri). C# hala başka bir dava düşüş olabilir - sadece güz thru açık bir sonraki vakaya goto kullanarak atlayarak yapmak zorunda.

Çok kötü oldu Java C semantiği ile girmek için fırsat sürmedi.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • LAHWF

    LAHWF

    5 Kasım 2009
  • majesticdubstep

    majesticdubs

    3 Kasım 2011
  • MisterBrightside

    MisterBright

    24 Mart 2006