我得到了控制流图的想法;它涉及的节点是基本块(总是发生的操作序列),由代表跳跃的边连接。
但是你如何表示一个子程序调用呢?
如果我有两个这样的功能:
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
)所以看起来一个普通的有向图不足以定义这些关系......也许我错过了一些东西。