使用Clang绑定提取类型字符串

4 投票
1 回答
1848 浏览
提问于 2025-04-17 18:57

我正在写一个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.RECORDclang.cindex.TypeKind.FUNCTIONPROTO类型的C语言类型字符串呢?

1 个回答

2

对于 RECORD,函数 get_declaration() 指向这个类型的声明(可能是 unionenumstructtypedef)。如果你想获取这个节点的名字,可以用拼写的方法来获取。(当然,要注意区分 TYPEDEF_DECL 和它底层的声明类型。)

对于 FUNCTIONPROTO,你需要结合使用 get_result()get_arguments() 这两个函数。

撰写回答