คำถามติดแท็ก unreachable-code

9
รหัสที่ไม่สามารถเข้าถึงได้ แต่สามารถเข้าถึงได้โดยมีข้อยกเว้น
รหัสนี้เป็นส่วนหนึ่งของแอปพลิเคชันที่อ่านและเขียนไปยังฐานข้อมูลที่เชื่อมต่อ ODBC trueมันจะสร้างบันทึกในฐานข้อมูลและการตรวจสอบแล้วถ้าเป็นประวัติการณ์สร้างเรียบร้อยแล้วกลับมา ความเข้าใจของฉันเกี่ยวกับโฟลว์การควบคุมมีดังนี้: command.ExecuteNonQuery()ได้รับการบันทึกไว้เพื่อโยนInvalid​Operation​Exceptionเมื่อ "การเรียกเมธอดไม่ถูกต้องสำหรับสถานะปัจจุบันของวัตถุ" ดังนั้นหากเป็นเช่นนั้นการดำเนินการของtryบล็อกจะหยุดลงfinallyบล็อกจะถูกดำเนินการจากนั้นจะดำเนินการreturn false;ที่ด้านล่าง อย่างไรก็ตาม IDE ของฉันอ้างว่าreturn false;เป็นรหัสที่ไม่สามารถเข้าถึงได้ และดูเหมือนว่าจะเป็นจริงฉันสามารถลบออกและรวบรวมได้โดยไม่มีข้อตำหนิใด ๆ อย่างไรก็ตามสำหรับฉันดูเหมือนว่าจะไม่มีค่าส่งคืนสำหรับเส้นทางรหัสที่มีการโยนข้อยกเว้นดังกล่าว private static bool createRecord(String table, IDictionary<String,String> data, System.Data.IDbConnection conn, OdbcTransaction trans) { [... some other code ...] int returnValue = 0; try { command.CommandText = sb.ToString(); returnValue = command.ExecuteNonQuery(); return returnValue == 1; } finally …

8
สาขาที่มีพฤติกรรมที่ไม่ได้กำหนดสามารถถือว่าไม่สามารถเข้าถึงได้และปรับให้เหมาะสมเป็นรหัสตายได้หรือไม่
พิจารณาข้อความต่อไปนี้: *((char*)NULL) = 0; //undefined behavior มันก่อให้เกิดพฤติกรรมที่ไม่ได้กำหนดไว้อย่างชัดเจน การมีอยู่ของคำสั่งดังกล่าวในโปรแกรมที่กำหนดหมายความว่าโปรแกรมทั้งหมดไม่ได้กำหนดไว้หรือพฤติกรรมนั้นจะไม่ได้กำหนดก็ต่อเมื่อโฟลว์การควบคุมมาถึงคำสั่งนี้ โปรแกรมต่อไปนี้จะถูกกำหนดไว้อย่างดีในกรณีที่ผู้ใช้ไม่เคยป้อนหมายเลข3หรือไม่? while (true) { int num = ReadNumberFromConsole(); if (num == 3) *((char*)NULL) = 0; //undefined behavior } หรือเป็นพฤติกรรมที่ไม่ได้กำหนดโดยสิ้นเชิงไม่ว่าผู้ใช้จะเข้ามา? นอกจากนี้คอมไพเลอร์สามารถสันนิษฐานได้ว่าพฤติกรรมที่ไม่ได้กำหนดจะไม่ถูกดำเนินการในรันไทม์? ซึ่งจะช่วยให้สามารถใช้เหตุผลย้อนหลังได้: int num = ReadNumberFromConsole(); if (num == 3) { PrintToConsole(num); *((char*)NULL) = 0; //undefined behavior } ที่นี่คอมไพเลอร์อาจให้เหตุผลว่าในกรณีที่num == 3เรามักจะเรียกใช้พฤติกรรมที่ไม่ได้กำหนด ดังนั้นกรณีนี้จะต้องเป็นไปไม่ได้และไม่จำเป็นต้องพิมพ์หมายเลข ifคำสั่งทั้งหมดสามารถปรับให้เหมาะสมได้ …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.