python - 使用 Clang 绑定(bind)提取类型字符串

标签 python clang llvm-clang

我正在编写一个 python 脚本(使用 python clang 绑定(bind))来解析 C header 并提取有关函数的信息:名称、返回类型、参数类型。

我在提取函数名称方面没有问题,但我找不到将 clang.cindex.Type 转换为 C 类型字符串的方法。 (例如 clang.cindex.TypeKind.UINTunsigned int)

目前,作为临时解决方案,我有一个字典 clang.cindex.TypeKind -> C type string 和处理指针和 const 限定符的代码,但我没有找到提取方法结构名称。

是否有通用的方法来获取 clang.cindex.Type 的 C 定义?如果没有,如何获取 clang.cindex.TypeKind.RECORDclang.cindex.TypeKind.FUNCTIONPROTO 类型的 C 类型字符串?

最佳答案

对于RECORD,函数get_declaration()指向类型的声明(一个unionenum, struct, 或 typedef);获取节点的拼写返回其名称。 (显然,请注意区分 TYPEDEF_DECL 与底层声明类型。)

对于 FUNCTIONPROTO,您必须结合使用 get_result()get_arguments()

关于python - 使用 Clang 绑定(bind)提取类型字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15388961/

相关文章:

python - Pytest:只运行 linter 检查(pytest-flake8),不运行测试

c++ - 在 NetBeans 中集成 Clang?

python - 从 python 包安装脚本中安装 CMake 宏脚本(使用 setup.py)

python - 搜索词的字符串相似度分数

python - IO错误 : [Errno 13] Permission denied

clang - 如何在指定的 LLVM 通过之前停止 clang 并转储 LLVM IR

c++ - 如何使用 clang 和 mingw-w64 进行编译?

assembly - 将文字值赋给 LLVM IR 中的局部变量

c++11 - LLVM IR Lambda 函数

llvm - 如何使用 native 编译器 (g++) 编译和运行 llc-3.4 生成的 C++ 代码?