Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 解析c++;使用GNU工具链从文件中获取函数头_C++_Parsing_Gcc_Swig - Fatal编程技术网

C++ 解析c++;使用GNU工具链从文件中获取函数头

C++ 解析c++;使用GNU工具链从文件中获取函数头,c++,parsing,gcc,swig,C++,Parsing,Gcc,Swig,我需要解析SWIG使用的.I文件中的函数头,该文件包含函数头旁边的各种垃圾。(最终输出将是函数声明列表) 对我来说,最好的选择是使用GNU工具链(GCC、Binutils等)来实现这一点,但我可能缺少使用SWIG实现这一点的简单方法。如果我是,请告诉我 谢谢:] 编辑:我也不知道如何使用GCC工具链来实现这一点,如果你有想法的话,这将非常棒。从垃圾(即C头文件)中提取函数decls的最佳方法是替换掉最难闻的垃圾:宏。您可以通过以下方式实现: cpp - The C Preprocessor

我需要解析SWIG使用的.I文件中的函数头,该文件包含函数头旁边的各种垃圾。(最终输出将是函数声明列表)
对我来说,最好的选择是使用GNU工具链(GCC、Binutils等)来实现这一点,但我可能缺少使用SWIG实现这一点的简单方法。如果我是,请告诉我
谢谢:]


编辑:我也不知道如何使用GCC工具链来实现这一点,如果你有想法的话,这将非常棒。

从垃圾(即C头文件)中提取函数decls的最佳方法是替换掉最难闻的垃圾:宏。您可以通过以下方式实现:

   cpp - The C Preprocessor
我们提供通用程序解析、分析和转换功能。它有多种语言的前端,包括C++。

已用于分析和转换非常复杂的C++程序及其头文件。

您不清楚在“解析函数头”之后将做什么;通常人们想要提取一些信息或制作另一个工件。具有C++前端的DMS可以进行解析;您可以将DMS配置为执行自定义操作

实际上,这通常不是一个下午的练习;DMS是一种复杂的动物,因为它必须处理复杂的动物,如C++。我希望你面对任何一种能够处理C++的工具都面临同样的复杂性。GCC工具链可以清楚地处理C++,因此您可能能够做到这一点(在相同的复杂性级别),但GCC被设计成编译器,而IMO则会发现它是一个战斗,以使其满足您的需要。
您的“输出函数声明”目标不明确。你只需要函数名吗?你想要一个函数签名吗?您想要函数所依赖的所有类型声明吗?如果函数所依赖的所有类型声明都不存在于要使用的现有include文件中,那么您需要这些类型声明吗?

我会尝试从或获取抽象语法树的XML转储。从那里,您可以轻松提取感兴趣的函数声明。

这对我没有帮助。宏等可能占文件的1%,我需要更强大的东西。我需要得到函数签名。它看起来确实是一个很棒的软件,但不幸的是我需要解决开源\免费的问题。为什么不需要支持函数签名的类型的类型声明呢?在我们使用DMS的大多数应用程序中,您希望生成代码来实例化/调用此类函数,您需要这些信息,否则无法获得可编译代码。我可以仅使用函数签名来获得可编译代码,因为我可以创建一个空指针,指向函数正在使用的类型,并使用*ptr作为对象。这是一种欺骗,但它肯定会编译,这就是我现在所需要的。谢谢你的回答!