【问题标题】:C++ file parse number of argumentsC++ 文件解析参数数量
【发布时间】:2009-07-13 00:20:57
【问题描述】:

我得到了一包带有静态源代码的 c++ 文件(已经开发,不需要对它们做任何事情)。

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

我的意思是,得到如下结果:

#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

例如,如果“foo”在条件为真时返回,如果为假,则返回另一个

提前致谢。

【问题讨论】:

  • 你能提供一个foo() 的例子,让它有2个回报吗?
  • int foo() { if(blah)return 1;否则返回 0; }
  • 如何在 c++ 中获得 2 个返回值?
  • @MattJoiner 我想他想要的是函数中返回语句的数量,而不是返回多个值的函数

标签: c++ parsing numbers param


【解决方案1】:

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

由于内容(可能)未记录,您需要configure doxygen 从未记录的文件中提取内容。

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

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

【讨论】:

  • Doxygen 运行良好,可以生成 XML 和 HTML 文件。我只需要解析xmll然后呵呵;)
【解决方案2】:

我会计算“,”的数量并从 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++;
 }
}

【讨论】:

  • 在诸如 template void doSomething(const SomeClass &thingy, const std::string &other); 之类的东西上计算逗号会失败
  • 你是对的,用 c++ 中的模板计算逗号会失败;更简单的方法是编写一个正则表达式来做到这一点。
  • 代码有模板(还有很多 em),所以我不能这样做嘿嘿
【解决方案3】:

这一切都太过分了,但也许这可能是你的一杯茶,Elsa 可以解析 c++ 并为你提供解析文件的抽象语法树。可能还有其他一些免费工具可以做同样的事情

【讨论】:

  • 当我得到依赖项时我可以试试这个呵呵
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-15
  • 1970-01-01
  • 2011-04-27
  • 2017-10-13
  • 1970-01-01
  • 2010-10-07
  • 1970-01-01
相关资源
最近更新 更多