如何在 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 源代码转换为解析树。从那里您可以更直接地再次获取所有这些信息。