有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (1) 个答案

  1. # 1 楼答案

    这取决于你想提取哪些信息。原则上,可以通过搜索向后分支来检测循环。如果没有通常的代码结构,循环就无法工作。如果使用通常的代码结构,则无法找到不属于循环一部分的反向分支

    因此,如果你想显式地命名它们,所有字节码指令gotogoto_wif_acmpeqif_acmpneif_icmpeqif_icmpgeif_icmpgtif_icmpleif_icmpltif_icmpneifeqifgt,^},^},^},如果它们可以向后指示一个点

    但在大多数情况下,你很难说出你有什么样的循环。编译代码中的for循环和while循环之间没有显著差异。例如,以下代码片段完全等效:

    • for(a();b();c()) {
        d();
      }
      
    • a();
      for(;b();) {
        d();
        c();
      }
      
    • a();
      for(;;) {
        if(!b()) break;
        d();
        c();
      }
      
    • a();
      while(b()) {
        d();
        c();
      }
      

    如果结构更复杂,情况会变得更糟,例如,当您想要确定指向同一代码位置的两个向后分支是否属于一个循环(在主体中有一个条件continue语句)或两个嵌套循环时。这可能是不可能的