使用Clang绑定提取类型字符串
我正在写一个Python脚本(使用Python的Clang绑定),这个脚本的功能是解析C语言的头文件,并提取一些关于函数的信息,比如函数名、返回类型和参数类型。
提取函数名对我来说没问题,但我找不到把clang.cindex.Type
转换成C语言类型字符串的方法。比如说,把clang.cindex.TypeKind.UINT
转换成unsigned int
。
目前,我暂时用一个字典来映射clang.cindex.TypeKind
到C语言类型字符串,并且有代码来处理指针和常量修饰符,但我还没找到提取结构体名称的方法。
有没有通用的方法可以获取clang.cindex.Type
的C语言定义?如果没有的话,我该如何获取clang.cindex.TypeKind.RECORD
和clang.cindex.TypeKind.FUNCTIONPROTO
类型的C语言类型字符串呢?
1 个回答
2
对于 RECORD
,函数 get_declaration()
指向这个类型的声明(可能是 union
、enum
、struct
或 typedef
)。如果你想获取这个节点的名字,可以用拼写的方法来获取。(当然,要注意区分 TYPEDEF_DECL
和它底层的声明类型。)
对于 FUNCTIONPROTO
,你需要结合使用 get_result()
和 get_arguments()
这两个函数。