澄清 Python CFFI 定义文件中“空”C 结构定义的有效性和原因

问题描述

我正在阅读一些代码,并遇到了这个相当奇怪的 C 结构定义:

谁能解释一下(如果可能,请提供参考):

  1. 如果这是一个有效的结构定义

  2. 这样的定义(没有定义字段/成员)的目的是什么?

    typedef struct dataObject { ...; } DATA_OBJECT;

[[编辑]]

上面的代码可用here

解决方法

如果这是一个有效的结构定义

没有

这样的定义(没有定义字段/成员)的目的是什么?

该文件的目的是为 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 dataObjectDATA_OBJECT 是不透明的类型,只能用作指针,并且 CFFI 解析器不支持结构声明。

据我所知,该文件用于 here in clips_build.py 构建 clipspy python 接口到 C。

,
  1. 如果这是一个有效的结构定义

不,不是。获取 C17 6.7.2.1 形式语法的一部分:

结构声明:
specifier-qualifier-list struct-declarator-listopt;
static_assert 声明

因此,首先,结构体需要包含一个“说明符-限定符列表”,通俗地说就是变量名之前的 const int 等内容。由于这不存在,例如 gcc 抱怨语法错误:

错误:'...' 标记前的预期说明符限定符列表


2.这样的定义(没有定义字段/成员)的目的是什么?

我猜这要么是伪代码,要么是他们提交的未编译代码的开发“TODO”,因为它还没有被编写。