2009-07-13 59 views
1

我得到了一个包含静态源代码(已经开发,不需要对它们做任何事情)的C++文件包。C++文件解析参数数

有一个程序/ lib /的方式来获得每个函数与这些文件之一的params数量的列表?

我的意思是,得到的结果一样:

#File a.cpp 
##a() -> 3 paramss 
##foo() -> 0 params (void) 

#File b.cpp 
##test() -> 1 param 

.... 

和更好的问题。

还有什么办法可以处理返回数呢?

#File a.cpp 
##a() -> 3 params, 1 return 
##foo() -> 0 params (void), 2 returns 

例如,如果“富”了一回,如果条件为真,并提前另如有虚假

感谢。

+1

你能提供一个`foo()`的例子,它有2个返回吗? – SingleNegationElimination 2009-07-13 00:52:29

+0

int foo(){if(blah)return 1;否则返回0; } – 2009-07-13 01:11:59

+0

你如何在C++中获得2个回报? – 2009-10-23 11:55:08

回答

2

您可以尝试在源文件上运行Doxygen

由于内容是(可能)没有记录,因此您需要使用doxygen从未公开的文件中提取内容。

如果您只想浏览可用函数的列表,则可以使用HTML输出。

您也可以将Doxygen输出配置为XML,然后编写解析器来提取您在每个函数上查找的统计信息。

+0

Doxygen运行良好,生成XML和HTML文件。 我只需要解析xmll,然后hehe;) – Ragnagard 2009-07-13 08:02:54

0

我会计算“,”的数量,并从1开始。这应该给你一个函数参数数量的准确计数。然后,我会检查函数名称前是否存在“void”,如果不存在,则可以打赌存在返回值。

ifstream infile; 
infile.open(...); 
int i, ret, args; 
String s; 

ret = args = 0; 
s = infile.getline(); 
for(i=0; s[i] != '('; i++) { 
if(s[i] == 'v' && s[i+1] == 'o' && s[i+2] == 'i' && s[i+3] == 'd') { 
    ret = 1; 
    break; 
} 
} 

for(i=0; s[i] != '('; i++) {} 

for(i; s[i] != ')'; i++) { 
if(args == 0 && s[i] != ' ') { 
    args++; 
} 
if(s[i] == ',') { 
    args++; 
} 
} 
0

这一切都是在上面的方式,但也许这可能是你杯茶,Elsa可以解析C++并为您提供解析文件的抽象语法树。可能有一些其他的免费工具可以做同样的工作