C 在静态分析中寻找循环迭代器

C 在静态分析中寻找循环迭代器,c,loops,static-analysis,C,Loops,Static Analysis,如何在静态分析中找到循环迭代器?变量成为迭代器的不同条件是什么 在一个超级简化的for循环中,类似于for(i=0;i

如何在静态分析中找到循环迭代器?变量成为迭代器的不同条件是什么

在一个超级简化的for循环中,类似于for(i=0;i 我准备好了以下概念:

  • 达到定义
  • 范围值
  • 控制流图
通常没有循环迭代器。例如,单个迭代器变量可能不够(例如,可以同时从两端遍历数组),循环的终止可能取决于外部数据(例如,用户输入),并且存在有用的无限循环(迭代器无用)

但是,可以使用一些启发式方法来识别迭代器表达式。对于循环,它们通常表示两个属性:进程终止。进度通常与使用依赖于此变量的值更新同一变量有关,例如:

i++; // For indexed structures
p = p -> next; // For linked structures
i <= n; // For scalar values
p == null; // For pointers
终止通常与进度表达式与某个常量(表示“循环常量”)的比较有关,例如:

i++; // For indexed structures
p = p -> next; // For linked structures
i <= n; // For scalar values
p == null; // For pointers

我恐怕您甚至不能一般地假设“初始化表达式的lhs是迭代器”。大量的
for
循环完全忽略了这一部分,其他循环中有多个声明,但其他循环使用的迭代器与在其中初始化的迭代器不同。我认为这不是为这个问题设计的。一本关于循环分析的书可以(也可能已经)写成。@YePhIcK。我用这个策略来实现一个超级简单的for循环。这个问题也适用于其他类型的for循环。不确定这个问题是关于什么的。一个循环有一个interator(我指的是所有类型的循环)甚至不是强制性的。这个答案似乎是公平的。至少是一个好的开始。谢谢我暂时结束这个问题。