【发布时间】:2017-07-21 15:31:49
【问题描述】:
我想调用一个返回struct的函数,这个函数有__cdecl的调用约定。
__cdecl 调用约定如何返回struct?
【问题讨论】:
-
取决于结构大小和环境(例如 windows 或 linux/mac)。它可能适合寄存器,也可能通过隐藏的指针参数传回内存。阅读相应的文档。你也可以只编译一些测试代码。
-
取决于平台。 Microsoft 32 位 ABI 按 EDX:EAX 中的值返回 64 位结构。 Linux ABI 不这样做。如果它适合 EAX,它只会按值返回结构。否则,它通过指针传递,使用隐式隐藏参数。除非您可以缩小范围,否则完整的答案将过于宽泛。
-
@Cody Gray 因此
__cdecl调用约定没有单一实现,每个操作系统都指定不同的实现!很高兴知道。 -
是的,调用约定是特定于平台的。 The Wikipedia page on this非常好。你读过吗?它完全涵盖了 Jester 和我在谈论的内容。