Birçok cevap , ifadeyi gerektirme nedeni olarak düşme yeteneğine odaklanıyor gibi görünmektedir break
.
Bunun sadece bir hata olduğuna inanıyorum, çünkü C tasarlandığında bu yapıların nasıl kullanılacağı konusunda neredeyse hiç deneyim yoktu.
Peter Van der Linden "Uzman C Programlama" kitabında dava açıyor:
Varsayılan düşüşün ne sıklıkta kullanıldığını görmek için Sun C derleyici kaynaklarını analiz ettik. Sun ANSI C derleyici ön ucunda her biri ortalama yedi kasa bulunan 244 anahtar ifadesi bulunur. Düşme, tüm bu vakaların sadece% 3'ünde görülür.
Başka bir deyişle, normal anahtar davranışı zamanın% 97'sinde yanlıştır . Sadece bir derleyicide değil - aksine, bu analizde düşüşün kullanıldığı yerlerde, bir derleyicide diğer yazılımlardan daha sık meydana gelen durumlar için, örneğin bir veya iki işlenen içerebilen operatörleri derlerken. :
switch (operator->num_of_operands) {
case 2: process_operand( operator->operand_2);
/* FALLTHRU */
case 1: process_operand( operator->operand_1);
break;
}
Vaka düşmesi o kadar geniş bir kusur olarak kabul edilir ki, yukarıda gösterilen özel bir yorum sözleşmesi bile vardır, bu da tiftik "bunun gerçekten düşmenin istendiği vakaların% 3'ünden biri olduğunu" söyler.
(Sadece tek bir blok bloğu olduğu sürece) hala birden çok vaka etiketlerinin yığılmasına izin verirken (her durumda bloğunun sonunda açık bir atlama ifadesi gerektiren C # için iyi bir fikir olduğunu düşünüyorum. C # 'da hala bir vakanın diğerine düşmesini sağlayabilirsiniz - sadece düşme yoluyla düşmeyi bir sonraki vakaya atlayarakgoto
.
Java'nın C semantiğinden kopma fırsatını almadığı çok kötü.