如何从实现中提取声明(.hpp文件)(.cpp文件)?

时间:2011-12-22 23:36:59

标签: c++

我想知道是否有从.cpp文件中获取的工具(可能是GNU C ++编译器) 充满了带有上述函数声明的.hpp文件的函数。

示例

我有:
magic.cpp

int foo() { return 42; }
char bar() { return 'z'; }

我想在应用这个奇妙的工具后得到这个:
magic.hpp

int foo();
char bar();

3 个答案:

答案 0 :(得分:4)

基于Debian的发行版:

apt-get install cproto

然后cproto magic.cpp给出以下输出:

/* magic.cpp */
int foo(void);
char bar(void);

答案 1 :(得分:3)

请参阅Dehydra or Treehydra。这两个工具中的一个应该允许您通过GCC执行此操作。

  

Dehydra是一种轻量级,可编写脚本的通用静态分析   能够对C ++代码进行特定于应用程序的分析的工具。

答案 2 :(得分:2)

要准确地执行此操作,您需要一个完整的C ++解析器和名称解析器,因为您不仅需要函数声明,还需要使它们定义良好的上下文。例如,如果您有声明

 void foo<T>(...){ ... }

在文件中,并且文件中有一个类型T,你最好保留T的声明,并且无论使用什么声明来定义T等等。所以你保留了网络 支持foo的定义......你必须决定是否要保留那些来自包含文件的内容。

我们的DMS Software Reengineering Toolkit是可定制的通用程序分析和转换机制。使用C++ Front End,可以解析C ++代码(包括#includes),构建抽象语法树(AST),解决开箱即用的名称和类型。然后,自定义代码将确定必要的引用Web,并且对于每个引用,如果需要,通过将source-to-source program transformations应用于AST,将其转换为签名(而不是实现)。然后,DMS的prettyprinter可以生成最终的输出文本。

DMS已用于其他大型项目的大规模C ++(重新)工程。

当然,你总是可以写一些糟糕的黑客来模拟这个,如果你不介意你可能需要手动补丁的答案。