如何解决澄清 Python CFFI 定义文件中“空”C 结构定义的有效性和原因
我正在阅读一些代码,并遇到了这个相当奇怪的 C 结构定义:
谁能解释一下(如果可能,请提供参考):
-
如果这是一个有效的结构定义
-
这样的定义(没有定义字段/成员)的目的是什么?
typedef struct dataObject { ...; } DATA_OBJECT;
[[编辑]]
解决方法
如果这是一个有效的结构定义
没有
这样的定义(没有定义字段/成员)的目的是什么?
该文件的目的是为 python CFFI 解析器提供要使用的类型和函数声明。
这个文件的目的是被python CFFI ffibuilder.cdef()预处理。来自letting C compiler fill the gaps:
此外,您可以在 cdef() 中的各个位置使用“...”(字面意思是点-点-点),以便要求 C 编译器填写详细信息。这些地方是:
- 结构声明:任何以“...;”结尾的结构{}或联合{}因为最后一个“字段”是部分的:它可能缺少字段,它们被声明为乱序,使用非标准对齐等。准确地说,字段偏移量、总结构大小和总结构对齐是通过查看 cdef 推导出来的不依赖,而是由编译器纠正。 (但请注意,您只能访问您声明的字段,而不能访问其他字段。)任何不使用“...”的结构声明都被假定为准确的,但会进行检查:如果不正确,您会收到错误.
- [...]
- unknown types: [....] 在某些情况下,您需要说 foo_t 不是不透明的,而只是一个您不知道任何字段的结构体;那么您将使用
typedef struct { ...; } foo_t;
。
我怀疑这对 CFFI 意味着 struct dataObject
和 DATA_OBJECT
是不透明的类型,只能用作指针,并且 CFFI 解析器不支持结构声明。
据我所知,该文件用于 here in clips_build.py 构建 clipspy
python 接口到 C。
- 如果这是一个有效的结构定义
不,不是。获取 C17 6.7.2.1 形式语法的一部分:
结构声明:
specifier-qualifier-list struct-declarator-listopt;
static_assert 声明
因此,首先,结构体需要包含一个“说明符-限定符列表”,通俗地说就是变量名之前的 const int
等内容。由于这不存在,例如 gcc 抱怨语法错误:
错误:'...' 标记前的预期说明符限定符列表
2.这样的定义(没有定义字段/成员)的目的是什么?
我猜这要么是伪代码,要么是他们提交的未编译代码的开发“TODO”,因为它还没有被编写。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。