gpt4 book ai didi

c - 为什么 C 代码不返回结构?

转载 作者:太空狗 更新时间:2023-10-29 16:29:14 27 4
gpt4 key购买 nike

虽然它非常方便,但我很少(如果有的话)遇到在 C 中返回 struct(或 union)的函数,无论它们是动态链接函数或静态定义的函数。
它们通过指针参数返回数据。

(Windows 中的一个动态示例是 GetSystemInfo。)

这背后的原因是什么?
是因为性能问题、ABI 兼容性问题还是其他原因?

最佳答案

我会说“性能”,再加上它有时甚至可能让 C 程序员感到惊讶的事实。对于许多人来说,在 C 的一般“风格”中,并不是将诸如结构之类的大东西当作仅仅是值来扔掉。根据语言,它们确实是。

同样,当需要复制结构时,许多 C 程序员似乎自动求助于 memcpy(),而不是仅仅使用赋值。

至少在 C++ 中,有一种称为“返回值优化”的东西,它能够像这样默默地转换代码:

struct Point { int x, y; };

struct Point point_new(int x, int y)
{
struct Point p;
p.x = x;
p.y = y;
return p;
}

进入:

void point_new(struct Point *return_value, int x, int y)
{
struct Point p;
p.x = x;
p.y = y;
*return_value = p;
}

它消除了结构值的(可能需要堆栈的)“真”返回。我想更好的是这个,不确定他们是否那么聪明:

void point_new(struct Point *return_value, int x, int y)
{
return_value->x = x;
return_value->y = y;
}

我不确定 C 编译器是否可以做任何这些,如果他们做不到,那么我猜这可能是反对结构返回的真正论点,对于性能非常关键的程序。

关于c - 为什么 C 代码不返回结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8728790/

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