我正在为生成的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
。
发布于 2018-07-04 03:54:58
抱歉,不可能。在将解析的代码转换为CFFI的内部ctype时,此信息已被丢弃。
看看pycparser
模块(它是CFFI内部使用的模块);它将C源代码转换为解析树。从那里你可以更直接地再次获得所有这些信息。
https://stackoverflow.com/questions/51161844
复制相似问题