获得所有功能'来自c / cpp文件的名称

时间:2014-10-29 02:50:06

标签: c clang

例如,有C个文件a.c,此文件中有三个函数:funA()funB()funC()

我想从这个文件中获取所有函数名称。

此外,我还想获得每个函数的起始行号和结束行号。

有没有解决方案?

我可以使用clang来实现吗?

2 个答案:

答案 0 :(得分:1)

您可以编译文件并在生成的二进制文件上使用nm http://en.wikipedia.org/wiki/Nm_(Unix)。然后,您可以解析nm的输出以获取函数名称。

如果要获取行号,可以使用函数名称来解析行号的源文件。

所有这一切都可以通过一个简短的perl脚本完成,该脚本可以调用gcc和nm。

这假设您当然正在使用* nix系统......

答案 1 :(得分:1)

一个适合这项工作的解决方案是cproto。它将扫描源文件(采用K& R或ANSI-C格式)并输出函数原型。您可以使用类似于{/ p>的find命令处理源文件的整个目录

find "$dirname" -type f -name "*.c" \
-exec /path/to/cproto -s \
-I/path/to/extra/includes '{}' >> "$outputfile" \;

虽然不再积极开发cproto项目,但cproto应用程序仍然非常,非常好地运行。它以合理的形式提供函数输出,可以根据需要进行相当容易的解析/格式化。

注意:根据我的使用情况,这只是一个选项。还有很多其他的可用。