我正在阅读一些代码,偶然发现了这个相当奇怪的C结构定义:
有没有人能解释一下(如果可能的话,带上参考资料):
如果这是有效的结构定义
这样的定义(没有定义字段/成员)的目的是什么?
类型定义结构dataObject { ...;} DATA_OBJECT;
[编辑]
上面的代码可以在这里找到
发布于 2021-02-26 19:24:55
如果这是有效的结构定义
不是。
这样的定义(没有定义字段/成员)的目的是什么?
该文件的目的是为python CFFI解析器提供要使用的类型和函数声明。
此文件的目的是使用python CFFI ffibuilder.cdef()进行预处理。让C编译器填补空白
此外,您还可以使用“...”(字面意思就是点-点-点)在cdef()的不同位置,以便让C编译器填写细节。这些地方是:
结构声明:任何以“...”结尾的struct {}或联合{},因为最后一个“field”是部分的:它可能是缺少的字段,声明顺序混乱,使用非标准对齐等。确切地说,通过查看cdef推导出的字段偏移量、总结构大小和总结构对齐不依赖于字段偏移量,而是由编译器更正。(但请注意,您只能访问您声明的字段,而不能访问其他字段。)任何不使用“...”的结构声明假设它是准确的,但这是经过检查的:如果它不正确,则会得到一个错误。
..。
未知类型:....在某些情况下,您需要说明foo_t不是不透明的,而只是一个您不知道任何字段的结构;然后您将使用typedef struct { ...;} foo_t;。
我怀疑这对CFFI来说意味着struct dataObject和DATA_OBJECT是不透明的类型,只能用作指针,而CFFI解析器不支持结构声明。
据我所知,这里在clips_build.py中使用该文件来构建clipspy python到C的接口。
发布于 2021-02-26 19:14:42
如果这是有效的结构定义
不,不是。要获取C17 6.7.2.1形式语法的一部分:
结构声明:
说明符-限定符-列表结构-声明符-列表_opt ;
_static_assert-声明
因此,首先,该结构需要在变量名之前包含一个“说明符-限定符列表”,简单地说就是const int等内容。由于这不存在,例如,gcc抱怨语法错误:
错误:'...‘前应有说明符-限定符-列表令牌
2.这样的定义的目的是什么(没有定义字段/成员)?
我猜这要么是伪代码,要么是开发人员的"TODO“,因为他们提交了不能编译的代码,因为它还没有被编写。
https://stackoverflow.com/questions/66384576
复制相似问题