พิจารณาข้อความต่อไปนี้switch
:
switch( value )
{
case 1:
return 1;
default:
value++;
// fall-through
case 2:
return value * 2;
}
รหัสนี้จะรวบรวม แต่มันถูกต้อง (= พฤติกรรมที่กำหนด) สำหรับ C90 / C99? ฉันไม่เคยเห็นรหัสที่กรณีเริ่มต้นไม่ใช่กรณีสุดท้าย
แก้ไข:
ตามที่Jon CageและKillianDSเขียน: นี่เป็นโค้ดที่น่าเกลียดและสับสนและฉันก็รู้ดี ฉันแค่สนใจในไวยากรณ์ทั่วไป (มันถูกกำหนดหรือไม่) และผลลัพธ์ที่คาดหวัง
goto
ไม่ได้ชั่วร้าย ผู้ติดตามลัทธิขนส่งสินค้าคือ! คุณไม่สามารถจินตนาการถึงสิ่งที่คนส่วนใหญ่สามารถหลีกเลี่ยงได้goto
เพราะมันเป็นสิ่งที่ชั่วร้ายมากจนทำให้รหัสของพวกเขาอ่านไม่ออก
goto
เป็นหลักในการจำลองบางสิ่งบางอย่างเช่นfinally
ประโยคในฟังก์ชั่นที่ซึ่ง ressources (ไฟล์, หน่วยความจำ) จะต้องได้รับการปล่อยตัวเมื่อหยุดและทำซ้ำสำหรับทุกกรณีข้อผิดพลาดรายการfree
และclose
ไม่ได้ช่วยในการอ่าน มีหลายวิธีgoto
ที่ฉันต้องการหลีกเลี่ยง แต่ทำไม่ได้คือเมื่อฉันต้องการแยกวงออกจากกันและฉันอยู่switch
ในวงวนนั้น