如何在 Python 中获取 CFFI 函数的 `const` 修饰符?
How can I get the `const` modifier of a CFFI function in Python?
我正在为生成的 C 代码编写一个 Python 包装器,其中包含使用指针参数作为输出的函数。我想反省那些使用 CFFI 生成的函数,以确定它们是否是我们的输出参数的输入。输入参数标记为 const
,但 CFFI 似乎丢弃了此信息。
考虑以下示例
from cffi import FFI
ffibuilder = FFI()
ffibuilder.set_source("_example",
r"""
int add(const int a, const int b) {
return a+b;
}
""")
ffibuilder.cdef("""
int add(const int a, const int b);
""")
if __name__ == "__main__":
ffibuilder.compile(verbose=True)
import _example
ff = _example.lib.add
ff_t = _example.ffi.typeof(ff)
print(ff_t)
打印 <ctype 'int(*)(int, int)'>
,而输入在代码中定义 const
。
抱歉,不可能。将解析的代码转换为 CFFI 的内部 ctype 时,此信息已被丢弃。
查看pycparser
模块(CFFI内部使用的模块);它将 C 源代码转换为解析树。从那里您可以更直接地再次获取所有这些信息。
我正在为生成的 C 代码编写一个 Python 包装器,其中包含使用指针参数作为输出的函数。我想反省那些使用 CFFI 生成的函数,以确定它们是否是我们的输出参数的输入。输入参数标记为 const
,但 CFFI 似乎丢弃了此信息。
考虑以下示例
from cffi import FFI
ffibuilder = FFI()
ffibuilder.set_source("_example",
r"""
int add(const int a, const int b) {
return a+b;
}
""")
ffibuilder.cdef("""
int add(const int a, const int b);
""")
if __name__ == "__main__":
ffibuilder.compile(verbose=True)
import _example
ff = _example.lib.add
ff_t = _example.ffi.typeof(ff)
print(ff_t)
打印 <ctype 'int(*)(int, int)'>
,而输入在代码中定义 const
。
抱歉,不可能。将解析的代码转换为 CFFI 的内部 ctype 时,此信息已被丢弃。
查看pycparser
模块(CFFI内部使用的模块);它将 C 源代码转换为解析树。从那里您可以更直接地再次获取所有这些信息。