ดูเหมือนว่าคำตอบหลายข้อจะมุ่งเน้นไปที่ความสามารถในการผ่านเป็นเหตุผลในการกำหนดbreak
คำสั่ง
ฉันเชื่อว่ามันเป็นเพียงความผิดพลาดเนื่องจากส่วนใหญ่เนื่องจากเมื่อ C ถูกออกแบบไม่มีประสบการณ์มากพอที่จะใช้โครงสร้างเหล่านี้
Peter Van der Linden ทำคดีนี้ในหนังสือของเขา "Expert C Programming":
เราวิเคราะห์แหล่งคอมไพเลอร์ของ Sun C เพื่อดูว่ามีการใช้ค่าเริ่มต้นในการล่มสลายบ่อยแค่ไหน ส่วนหน้าคอมไพเลอร์ Sun ANSI C มีคำสั่งสวิตช์ 244 รายการแต่ละรายการมีค่าเฉลี่ยเจ็ดกรณี ล้มลงเกิดขึ้นเพียง 3% ของทุกกรณี
กล่าวอีกนัยหนึ่งพฤติกรรมสวิตช์ปกติคือ ผิด 97% ของเวลา ไม่ใช่แค่ในคอมไพเลอร์ - ในทางกลับกันที่การล่มสลายถูกนำมาใช้ในการวิเคราะห์นี้มันมักจะเกิดขึ้นสำหรับสถานการณ์ที่เกิดขึ้นบ่อยครั้งในคอมไพเลอร์มากกว่าในซอฟต์แวร์อื่น ๆ เช่นเมื่อรวบรวมตัวดำเนินการที่อาจมีหนึ่งหรือสองตัวถูกดำเนินการ :
switch (operator->num_of_operands) {
case 2: process_operand( operator->operand_2);
/* FALLTHRU */
case 1: process_operand( operator->operand_1);
break;
}
คดีที่ผ่านมาได้รับการยอมรับอย่างกว้างขวางว่าเป็นข้อบกพร่องที่มีแม้กระทั่งการประชุมความคิดเห็นพิเศษดังที่แสดงไว้ด้านบนซึ่งบอกว่าเป็นผ้าสำลี "นี่เป็นหนึ่งใน 3% ของกรณีที่ผู้คนต้องการผ่าน"
ฉันคิดว่ามันเป็นความคิดที่ดีสำหรับ C # ที่จะต้องใช้คำสั่ง jump อย่างชัดเจนในตอนท้ายของแต่ละ case case (ในขณะที่ยังอนุญาตให้ซ้อน case case หลาย ๆ ตัวได้ ใน C # คุณยังสามารถมีกรณีหนึ่งล้มลงไปอีก - คุณเพียงแค่ต้องทำให้ผ่านชัดเจนโดยการกระโดดไปยังกรณีถัดไปโดยใช้goto
คุณเพียงแค่ต้องทำให้ฤดูใบไม้ร่วงผ่านอย่างชัดเจนโดยการกระโดดกรณีต่อไปโดยใช้
มันแย่มากที่ Java ไม่ได้มีโอกาสหยุดพักจากซีแมนทิกส์ซี