gpt4 book ai didi

c - 在 c 中定义数据类型的两种方法。我应该选择哪一个?

转载 作者:行者123 更新时间:2023-12-04 06:03:27 25 4
gpt4 key购买 nike

在 c 语言编程中,我应该赞成:

typedef struct
{
Point_t points[4];
} Quad_t;

超过:
typedef Point_t Quad_t[4];

在性能方面?和最佳实践?

请注意 Point_t定义如下:
typedef union
{
struct
{
int x;
int y;
};
int coords[2];
} Point_t;

我发现当四边形跨函数传递时,第一种方法更具可读性和更容易处理,但是,第二种方法似乎更直接。

此外,我无法感觉到使用两者的性能差异,但我假设这是因为我的代码中只有一小部分使用了这种类型。 (但是,我还是想为将来学习这个技巧)

非常感谢提前。哈桑。

最佳答案

我完全同意你在传递函数时关于可读性的论点。一般来说,我认为为普通数组制作 typedef 会导致代码困惑,我建议避免这种做法。

例如。

typedef int Value[4];

void PassByValue(Value x) // Does it really?
{
x[0] = x[3];
}

int main(void)
{
Value x = {1, 2, 3, 4};

PassByValue(x); // oops - passes a _pointer_ by value
// values in x can be changed.
}

虽然实际上按值传递数组(如果不将其包装在结构中是不可能的)可能比传递指针更昂贵,但至少在调用站点和函数定义中发生了什么是很清楚的。如果性能是一个问题,那么您可以明确地获取结构的地址并将指针传递给它,这具有在两个站点都更加明确的优点。

关于c - 在 c 中定义数据类型的两种方法。我应该选择哪一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8666065/

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