要求澄清“的有效性和理由”;“空的”;Python CFFI定义文件中的C结构定义
我正在阅读一些代码,遇到了一个相当奇怪的C结构定义: 有人能解释一下吗(如果可能,请提供参考资料):要求澄清“的有效性和理由”;“空的”;Python CFFI定义文件中的C结构定义,c,data-structures,struct,python-cffi,cffi,C,Data Structures,Struct,Python Cffi,Cffi,我正在阅读一些代码,遇到了一个相当奇怪的C结构定义: 有人能解释一下吗(如果可能,请提供参考资料): 如果这是一个有效的结构定义 这种定义的目的是什么(如果没有定义字段/成员) typedef结构数据对象 { ...; }数据对象 [[编辑]] 上面的代码是可用的 如果这是一个有效的结构定义 不,不是。要获取C17 6.7.2.1正式语法的一部分: 结构声明: 说明符限定符列表结构声明符listopt 静态断言声明 因此,首先,结构需要包含一个“说明符限定符列表”,在简单的英语中,它是变量名
说明符限定符列表结构声明符listopt
代码>
静态断言声明
因此,首先,结构需要包含一个“说明符限定符列表”,在简单的英语中,它是变量名之前的const int
etc内容。由于这一点不存在,例如,gcc抱怨语法错误:
错误:在“…”标记之前应有说明符限定符列表
2.这种定义的目的是什么(如果没有定义字段/成员)
我猜要么是伪代码,要么是开发人员的“TODO”,他们在其中提交了未编译的代码,因为它尚未编写
如果这是一个有效的结构定义
没有
这种定义的目的是什么(如果没有定义字段/成员)
该文件的目的是为python CFFI解析器提供要使用的类型和函数声明
此文件的目的是由预处理。发件人:
此外,您可以在cdef()中的不同位置使用“…”(字面意思是dot),以便要求C编译器填写详细信息。这些地方包括:
- 结构声明:任何以“…”结尾的结构{}或联合{};,因为最后一个“字段”是部分的:它可能是缺少的字段,使它们声明为无序的,使用非标准对齐方式,等等。精确地说,字段偏移量,总结构大小,通过查看cdef推断出的总体结构对齐不受依赖,而是由编译器更正。(但请注意,您只能访问您声明的字段,而不能访问其他字段。)任何不使用“…”的结构声明都被认为是准确的,但这是经过检查的:如果不正确,则会出现错误
- [……]
- 未知类型:[……]在某些情况下,您需要说foo_t不是不透明的,只是一个不知道任何字段的结构;然后使用
typedef struct{…;}foo\t代码>
我怀疑这对CFFI意味着struct dataObject
和DATA\u OBJECT
是不透明类型,只能用作指针,CFFI解析器不支持结构声明
据我所知,该文件用于为C构建clipspy
python接口。为什么键入代码>而不是让它空着?我很确定它应该是伪代码?这不是C源文件;文件扩展名为.cdef
。仅从名称来看,我猜想它是由其他软件处理成C源文件的。你确定上面提到的代码可以编译吗?命名接受它的编译器,is说:声明也可以在不同的地方包含“…”;这些占位符将由编译器完成。
。是时候复习一下谷歌技能了。我认为这解释了语义。这种语法使得数据\u对象
不不透明。对于不透明结构,常规C语法也可以在cffi中使用。区别在于非不透明结构具有已知的大小,可以实例化。有些C API就是这样工作的,你调用一个函数来初始化你的结构(而不是直接写它的字段),但是结构本身必须由你的代码声明,并且你把一个指向它的指针传递给初始化器函数。是的,如果是实际不透明的结构,定义中就没有typedef,它必须(可选)被放置在结构转发声明中。