gpt4 book ai didi

swig - 在 SWIG 接口(interface)中忽略 __attribute__((packed)) 是否总是安全的?

转载 作者:行者123 更新时间:2023-12-04 15:12:22 29 4
gpt4 key购买 nike

由于 SWIG 无法解析 __attribute__((packed))在我想包装的一些 C 结构上,我通过放置一个

#define __attribute__(x)

在我的 .i文件。

这什么时候会来咬我?

最佳答案

这实际上是完全理智的。 SWIG 不需要了解 struct 的布局。 s 您正在包装以便能够生成正确的代码。 (它甚至不需要知道它们包含的所有成员)。

这样做的原因是生成的代码很大程度上只是编码(marshal)数据。在 C 中,您可以合法地编写:

void show_a(const struct foo *instance) {
printf("%s", instance->b);
}

不管 foo被定义为:
struct foo {
double a;
char *b;
}

或者
struct foo {
char *b;
double a,c;
int xyz;
}

唯一需要打包/对齐的地方是创建新结构时。不过,这也可以正确处理,前提是您也不要对 C 编译器本身隐藏该属性,因为生成的 C 包装代码将使用真实定义,而不是您在接口(interface)文件中显示的伪定义。

这有点笨拙,但您可以根据需要通过阅读生成的包装器来说服自己。

一般的答案是,你可以对 SWIG 本身撒谎很多,当 C 编译器看到生成的代码并将其与真实的定义/声明相协调时,最终一切都会好起来的。

在特定情况下,简短的回答是:只要您只输入 #define在 .i 文件中,然后仅在它不会传递给生成的 module_wrap.c 的地方,你很好。

关于swig - 在 SWIG 接口(interface)中忽略 __attribute__((packed)) 是否总是安全的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17889678/

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