คำถามนี้เป็นผลมาจากการสนทนาที่น่าสนใจที่ programming.reddit.com เมื่อไม่นานมานี้ โดยทั่วไปแล้วจะเดือดตามรหัสต่อไปนี้:
int foo(int bar)
{
int return_value = 0;
if (!do_something( bar )) {
goto error_1;
}
if (!init_stuff( bar )) {
goto error_2;
}
if (!prepare_stuff( bar )) {
goto error_3;
}
return_value = do_the_thing( bar );
error_3:
cleanup_3();
error_2:
cleanup_2();
error_1:
cleanup_1();
return return_value;
}
การใช้goto
ที่นี่ดูเหมือนจะเป็นวิธีที่ดีที่สุดส่งผลให้รหัสที่สะอาดและมีประสิทธิภาพที่สุดในบรรดาความเป็นไปได้ทั้งหมดหรืออย่างน้อยก็ดูเหมือนว่าสำหรับฉัน อ้างถึง Steve McConnell ในCode Complete :
goto มีประโยชน์ในรูทีนที่จัดสรรทรัพยากรดำเนินการกับทรัพยากรเหล่านั้นและจากนั้นจัดสรรทรัพยากร ด้วย goto คุณสามารถล้างข้อมูลในส่วนหนึ่งของโค้ดได้ goto ช่วยลดโอกาสที่คุณจะลืมจัดสรรทรัพยากรในแต่ละที่ที่คุณตรวจพบข้อผิดพลาด
การสนับสนุนอื่นสำหรับแนวทางนี้มาจากหนังสือLinux Device Driversในส่วนนี้
คุณคิดอย่างไร? กรณีนี้ใช้ได้กับgoto
ใน C หรือไม่? คุณต้องการวิธีการอื่นซึ่งสร้างรหัสที่ซับซ้อนและ / หรือมีประสิทธิภาพน้อยกว่า แต่หลีกเลี่ยงgoto
หรือไม่?