我得到了控制流图的想法;它涉及的节点是基本块(总是发生的操作序列),由代表跳跃的边连接。
但是你如何表示一个子程序调用呢?
如果我有两个这样的功能:
int tweedledee(void)
{
int x = 16;
return x + do_something();
}
int tweedledum(int n)
{
if (n < 0)
return n;
else
return n + do_something();
}
使用这两个函数调用do_something(),那么我需要一种方法来允许从一个块跳转tweedledee到do_something然后另一个跳转回tweedledee,以及从一个块跳转tweedledum到do_something然后返回到tweedledum,但是从来没有从到跳转tweedledee到do_something然后跳转到tweedledum。(或tweedledum→ do_something→ tweedledee)所以看起来一个普通的有向图不足以定义这些关系......也许我错过了一些东西。