prcc demo.c | prcg这是典型的通过管道把小程序组起来的例子。
闲着的时候在这个程序上做了些小工作。既然有了第一个程序,那也可以用python来快速写个程序继续做些工作。首先想到的是写个程序把函数名打印出来,在有调用关系的函数之间用直线连起来。python就是容易实现。这里有一个问题,就是怎么排列函数名的位置,使得连线不怎么相交,因为相交起来就不容易看到函数之间的关系了。不好解决,还是用了以前《集体智慧编程》里面的优化函数,也就是优化问题。通用思路就是试着移动各个函数的位置,朝着相交点最少的部分移动(这里给一个解,相交点的个数为评估函数)。效果不是很好,当函数比较多的时候哪种算法都比较慢,而且交点看起来不可避免。这是一个结果。运行方法是:
prcc demo.c | python drawfuncs.py 或者 find *.c | xargs prcc| python drawfuncs.py 来处理多个程序。然后又想着可以做一个标签一样的东西,把调用深度比较潜的放大,调用深度深的缩小。不连线,位置随机画。这样一眼能看出来这个程序的主要函数是哪些。结果成这样了。 位置随便画还是不好,可以分层。然后再相邻层之间的函数有调用关系的再用直线连起来,就变成这样了。清晰一点。既然有函数关系,其实是可以做到更好的,就像上面那个prcg.c程序,不过代码要复杂些了。 C要的是运行速度,Python实现速度快!