Questions tagged «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 { command.Dispose(); } return false; } 我在这里理解的错误是什么?

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语句可以优化。根据标准是否允许这种向后推理?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.