例如,有C
个文件a.c
,此文件中有三个函数:funA()
,funB()
和funC()
。
我想从这个文件中获取所有函数名称。
此外,我还想获得每个函数的起始行号和结束行号。
有没有解决方案?
我可以使用clang来实现吗?
答案 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
应用程序仍然非常,非常好地运行。它以合理的形式提供函数输出,可以根据需要进行相当容易的解析/格式化。
注意:根据我的使用情况,这只是一个选项。还有很多其他的可用。