คำถามติดแท็ก goto

ในการเขียนโปรแกรมที่จำเป็นคำสั่ง "go to" คือคำสั่งกระโดดที่ไม่มีเงื่อนไขซึ่งเปลี่ยนขั้นตอนการควบคุมไปยังจุดของโปรแกรมที่อ้างถึงโดยคำสั่ง "go to"

30
GOTO ยังถือว่าเป็นอันตรายหรือไม่? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ทุกคนตระหนักถึงจดหมายถึงบรรณาธิการของ Dijkstra : ไปที่ข้อความที่ถือว่าเป็นอันตราย (เช่นที่นี่ . html การถอดเสียงและที่นี่ . pdf) และมีการผลักดันที่น่ากลัวตั้งแต่นั้นมา ในขณะที่มันเป็นไปได้ที่จะใช้ในการผลิตกลับไปข้าง unmaintainable รหัสแผ่กิ่งก้านสาขา แต่กระนั้นมันก็ยังคงอยู่ในการเขียนโปรแกรมภาษาที่ทันสมัย แม้แต่โครงสร้างการควบคุมความต่อเนื่องขั้นสูงใน Scheme ก็สามารถอธิบายได้ว่าเป็น goto ที่ซับซ้อน มีกรณีใดบ้างที่รับประกันการใช้ goto? ควรหลีกเลี่ยงเมื่อใด ตามคำถามการติดตาม: C มีฟังก์ชั่นคู่หนึ่งคือ setjmp และ longjmp ที่ให้ความสามารถในการข้ามไปไม่ได้อยู่ในกรอบสแต็กปัจจุบันเท่านั้น แต่อยู่ในกรอบการเรียกใด ๆ สิ่งเหล่านี้ควรได้รับการพิจารณาว่าอันตรายหรือไม่? อันตรายมาก? Dijkstra เองรู้สึกเสียใจกับตำแหน่งนั้นซึ่งเขาไม่รับผิดชอบ ในตอนท้ายของEWD1308 (เช่นกันที่นี่ . pdf) เขาเขียนว่า: ในที่สุดเรื่องสั้นสำหรับการบันทึก …

22
มีคำสั่ง goto ใน Java หรือไม่?
ฉันสับสนเกี่ยวกับเรื่องนี้ พวกเราส่วนใหญ่ได้รับการบอกว่าไม่มีคำสั่ง goto ใน Java แต่ฉันพบว่ามันเป็นหนึ่งในคำหลักใน Java จะใช้ที่ไหน? หากไม่สามารถใช้งานได้ทำไมจึงรวมอยู่ใน Java เป็นคำหลัก
259 java  syntax  keyword  goto 


25
เคยมีข้อได้เปรียบในการใช้ 'goto' ในภาษาที่สนับสนุนลูปและฟังก์ชั่นหรือไม่? ถ้าเป็นเช่นนั้นทำไม
ฉันอยู่ภายใต้การแสดงผลที่gotoไม่ควรใช้ถ้าเป็นไปได้ ในขณะที่อ่าน libavcodec (ซึ่งเขียนเป็นภาษา C) เมื่อวันก่อนฉันสังเกตเห็นการใช้งานหลายอย่าง มันเคยเป็นประโยชน์ที่จะใช้gotoในภาษาที่รองรับลูปและฟังก์ชั่นหรือไม่? ถ้าเป็นเช่นนั้นทำไม


16
ฉันจะใช้ goto ใน Javascript ได้อย่างไร
gotoฉันมีรหัสบางอย่างที่ฉันอย่างจะต้องดำเนินการโดยใช้ ตัวอย่างเช่นฉันต้องการเขียนโปรแกรมดังนี้: start: alert("RINSE"); alert("LATHER"); repeat: goto start มีวิธีทำใน Javascript หรือไม่?
127 javascript  goto 

3
ทำไม Go จึงมีคำสั่ง "goto"
ฉันประหลาดใจที่พบว่า Go มีคำสั่ง'goto' ฉันได้รับการสอนเสมอว่าคำสั่ง 'goto' เป็นเรื่องของอดีตและความชั่วร้ายเพราะมันเกิดขึ้นจากขั้นตอนที่แท้จริงของโปรแกรมและฟังก์ชันหรือวิธีการเป็นวิธีที่ดีกว่าในการควบคุมโฟลว์ ฉันต้องขาดอะไรบางอย่าง ทำไม Google จึงรวมไว้ด้วย?
110 go  goto 

8
มีใครยังใช้ [goto] ใน C # และถ้าเป็นเช่นนั้นทำไม? [ปิด]
ปิด . คำถามนี้เป็นคำถามความคิดเห็นตาม ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบได้ด้วยข้อเท็จจริงและการอ้างอิงโดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ฉันสงสัยว่ามีใครยังใช้ไวยากรณ์คำหลัก "goto" ใน C # หรือไม่และมีเหตุผลอะไรที่เป็นไปได้ในการทำเช่นนั้น ฉันมักจะมองว่าข้อความใด ๆ ที่ทำให้ผู้อ่านกระโดดข้ามโค้ดว่าเป็นการปฏิบัติที่ไม่ดี แต่สงสัยว่ามีสถานการณ์ที่น่าเชื่อถือสำหรับการใช้ไวยากรณ์ดังกล่าวหรือไม่? ไปที่คำจำกัดความของคำหลัก
104 c#  .net  coding-style  goto 

15
การใช้ goto อย่างถูกต้องสำหรับการจัดการข้อผิดพลาดใน C?
คำถามนี้เป็นผลมาจากการสนทนาที่น่าสนใจที่ 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; } …

1
จะใช้ตัวแปร goto รั่วหรือไม่?
เป็นความจริงหรือไม่ที่gotoกระโดดข้ามบิตของรหัสโดยไม่เรียกผู้ทำลายและสิ่งของ? เช่น void f() { int x = 0; goto lol; } int main() { f(); lol: return 0; } จะไม่xรั่วไหล?
94 c++  goto 


3
คอมไพเลอร์ใด ๆ สำหรับ JVM ใช้ goto "wide" หรือไม่?
ฉันคิดว่าคุณส่วนใหญ่รู้ว่าgotoเป็นคำหลักที่สงวนไว้ในภาษา Java แต่ไม่ได้ใช้จริง และคุณก็อาจจะรู้ว่าgotoเป็น opcode Java Virtual Machine (JVM) ฉันคิดว่าทุกคนที่มีความซับซ้อนของโครงสร้างการควบคุมการไหลของ Java, Scala และ Kotlin กำลังที่ระดับ JVM, ดำเนินการโดยใช้การรวมกันของบางgotoและifeq, ifle, ifltฯลฯ ดูที่ข้อกำหนด JVM https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.goto_wฉันเห็นว่ามันมีgoto_wopcode เช่นกัน ในขณะที่gotoออฟเซ็ตสาขา 2 ไบต์goto_wจะใช้ออฟเซ็ตสาขา4 ไบต์ สเป็คระบุว่า แม้ว่าคำสั่งgoto_wใช้ออฟเซ็ตสาขา 4 ไบต์ปัจจัยอื่น ๆ จำกัด ขนาดของวิธีการเป็น 65535 ไบต์ (§4.11) ขีด จำกัด นี้อาจเพิ่มใน Java Virtual Machine รุ่นที่วางจำหน่ายในอนาคต เสียงที่ฉันชอบgoto_wคือการพิสูจน์ในอนาคตเหมือนกับ*_wopcodes อื่น ๆ แต่ก็ยังเกิดขึ้นกับผมว่าอาจจะgoto_wสามารถนำมาใช้กับทั้งสองไบต์สำคัญมากพุ่งออกมาและทั้งสองไบต์อย่างมีนัยสำคัญน้อยลงเช่นเดียวกับgotoที่มีการปรับเปลี่ยนตามความจำเป็น ตัวอย่างเช่นกำหนด Java …
47 java  jvm  goto 

2
การกระโดดข้ามการกำหนดค่าเริ่มต้นของตัวแปรไม่ถูกต้องหรือทำให้เกิดพฤติกรรมที่ไม่ได้กำหนดหรือไม่?
พิจารณารหัสนี้: void foo() { goto bar; int x = 0; bar: ; } GCC และ Clang ปฏิเสธเนื่องจากการข้ามไปยังการbar:ข้ามการกำหนดค่าเริ่มต้นของตัวแปร MSVC ไม่บ่นเลย (ยกเว้นการใช้xหลังจากbar:ทำให้เกิดการเตือน) เราสามารถทำสิ่งเดียวกันด้วยswitch: void foo() { switch (0) { int x = 0; case 0: ; } } ตอนนี้ทั้งสามคอมไพเลอร์ปล่อยข้อผิดพลาด ตัวอย่างเหล่านั้นไม่ดีหรือไม่ หรือพวกเขาทำให้ UB? ฉันเคยคิดว่าทั้งสองรูปแบบไม่ดี แต่ฉันไม่สามารถหาส่วนที่น่ารำคาญของมาตรฐาน [stmt.goto]ไม่ได้พูดอะไรเกี่ยวกับเรื่องนี้และไม่ไม่[stmt.select]
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.