有没有一个工具可以检测C代码中的递归函数调用?

时间:2011-10-26 21:27:34

标签: c recursion

我需要在继承的代码库中搜索并消除递归函数调用。 到目前为止,我无法找到任何可以进行静态分析并找到这些功能的工具。

3 个答案:

答案 0 :(得分:6)

您可能想尝试cflow

  

cflow实用程序应分析一组目标文件或汇编程序,C语言,lex或yacc源文件,并尝试构建一个图形,写入标准输出,绘制外部参考图表。

它应该打印一个调用图并标记递归函数。

答案 1 :(得分:4)

如果您的代码通过函数指针进行间接调用,则检测其中的递归调用可能非常困难(在一般情况下可能是不可能的,因为等同于暂停问题。)。

但我完全不确定消除递归是值得的。对于一些递归算法或问题,您只需通过使用堆栈(在堆中)模拟它来替换它,并且这对它没有多大帮助(并使代码不可读)。

更实用的解决方案(至少在Linux上)将限制堆栈大小,并运行测试直到它们通过填充堆栈而中断。然后,您可以使用调试器来了解它是如何发生的。

我认为你不应该为递归而烦恼......

答案 2 :(得分:0)

CIL可以为C程序生成CFG,但有点像使用大锤放入主食。