在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;
我发现第一种方法在函数传递四边形时更易读,更容易处理,但第二种方法似乎更直接。
另外,我无法感知使用其中任何一个的性能差异,但我假设这是因为我的代码中只有一小部分使用此类型。 (但是,我仍然希望了解未来的这个提示)
非常感谢.③哈桑。
答案 0 :(得分:3)
我完全同意你在传递函数时关于可读性的论点。一般来说,我认为为普通数组制作typedef会导致代码混乱,我建议不要这样做。
E.g。
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.
}
虽然实际按值传递一个数组是不正确的(如果没有将它包装在一个结构中就不可能)可能比传递一个指针更昂贵,至少它很明显两者都在发生什么调用站点和函数定义。如果性能是一个问题,那么你可以明确地获取一个结构的地址并传递一个指向它的指针,这有利于在两个站点更明确。
答案 1 :(得分:0)
最好的程度取决于程序员的兴趣和相似之处。然而,一个甚至重要的观点是编码标准,对于大多数程序员来说,第一种方法更具可读性和可理解性。
然而,当您的代码将被其他人使用或者您需要向非C背景的人解释时,第二种方法会更有用。我建议看一下C编程标准,或者一本关于通用编码概念的书(比如Steve McConnell的Code Complete第二版,这是关于编码的最好的书),this link可能有所帮助。
答案 2 :(得分:0)
如果尝试声明指向const Quad_t
的指针,则可能遇到this之类的问题。通常,不建议(为简单起见)将数组与typedef混合。