这似乎是一个重复的问题(我昨天发现有人问同样的事情,但我现在找不到它),除了这个问题的另一个副本提供了另一个没有真正解决问题的答案。
我正在研究一个使用libclang的小工具来总结给定头文件中的结构和函数声明,作为构建自动Ruby绑定以进行单元测试的工具的一部分。
我目前正在自己的源文件中运行我的初出茅庐的程序以进行测试,并且当我遍历此函数声明时(例如):
enum CXChildVisitResult statementVisitor(CXCursor cursor, CXCursor parent, CXClientData client_data);
返回类型节点(它是一个枚举)基本上包含了我所期望的内容,但所有三个参数(都是结构类型)都具有CXType“int”。根据我能够找到的内容,编译器将结构体视为整数类型并用合适的偏移量替换成员访问是非常标准的。
这对我来说似乎很奇怪,因为知道实际的结构类型对于工具来说是完全必要的,例如,确定成员访问是否以有效的方式在AST中的其他地方使用。我试图使用clang_getCursorExtent来获取原始源代码,但这会在预处理后的文件中提供偏移量,所以我不能简单地重新打开文件进行读取以获取文本。更重要的是,如果我要使用libclang来查找参数声明,我还想使用libclang来理解它们。使用静态代码分析库来帮助我识别我需要手工解析哪些C代码字符串感觉有点傻。
是否有一个cmd-line标志,我可以传递给clang来说服它保留结构类型,或者其他一些方法来获取代码中声明的参数类型?