gpt4 book ai didi

python - Cython:在结构中嵌套 union

转载 作者:太空狗 更新时间:2023-10-29 18:00:26 24 4
gpt4 key购买 nike

在 Cython 胶水声明中,如何表示包含匿名 union 的 C struct 类型?例如,如果我有一个 C 头文件 mystruct.h 包含

struct mystruct
{
union {
double da;
uint64_t ia;
};
};

然后,在对应的.pyd文件中

cdef extern from "mystruct.h":
struct mystruct:
# what goes here???

我试过这个:

cdef extern from "mystruct.h":
struct mystruct:
union {double da; uint64_t ia;};

但这只在 union 行给我“C 变量声明中的语法错误”。

最佳答案

对于那些通过谷歌来到这里的人,我找到了一个解决方案。如果你有一个结构:

typedef struct {
union {
int a;
struct {
int b;
int c;
};
}
} outer;

您可以在 Cython 声明中将其全部展平,如下所示:

ctypedef struct outer:
int a
int b
int c

Cython 不会生成任何对结构的内存布局做出任何假设的代码;您只是通过告诉它生成什么语法来调用它来告诉它您所调用内容的实际结构。因此,如果您的结构有一个大小为 int 的成员,可以作为 ((outer) x).a 访问,那么您可以抛出 a在结构定义上,它将起作用。它在文本替换上运行,而不是内存布局,所以它不关心这些东西是否在匿名 union 或结构中或者你有什么。

关于python - Cython:在结构中嵌套 union ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12452210/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com