繁体   English   中英

冗余或良好做法-结构

[英]Redundant or good practice - Structs

我今天遇到的问题是关于编程的便利性和效率之间的平衡的问题之一,更具体地说是关于结构的使用。

“结构是一个或多个变量(可能是不同类型)的集合,它们以单个名称分组在一起以方便处理。”

该摘录与以下基本示例一起在“ C编程语言”中找到:

struct point { 
   int x; 
   int y; 
}; 

struct rect { 
   struct point pt1; 
   struct point pt2; 
}; 

到现在为止还挺好。

我开始编写一个计算线性方程的程序,结果如下:

typedef struct point { double x; double y; } point;

typedef struct linearEquation { double mx; double b; } linearEquation;

point和linearEquation具有完全相同的变量,两个双精度。

因此,问题是:这些是多余的吗,一个结构是否可以同时用于两者?还是为了可读性而保留它? 考虑到函数需要特定的参数并具有特定的返回类型。

例如,我可以用以下内容代替每个人:

typedef struct twoDs { double a; double b; } twoDs;

您将如何处理?

如果要编写任何认真的代码,则应始终保留单独的类型。 它提高了可读性和可维护性,并且编译器能够告诉您有关错误分配的信息。

类型化语言的整个概念就是关于这一点的-毕竟,它们都只是内存中的字节,因此您最好也不要使用任何类型,而直接直接处理字节。 这可能行得通,但是将成为无法阅读和维护噩梦的终极目标。

我同意@Aganju-类型名称用于读取代码并对其进行维护,因此两个不同类型以相同方式实现这一事实无关紧要-它们仍然不同。

考虑到将来您可能需要更改linearEquation

例如,假设将来您决定将缓存的结果添加到linearEquation实现中...是否会添加另一个point字段? 您会开始在代码库中搜索所有point实际上实际上是linearEquation point引用吗?

拥有单独的类型对您将来更好,它将使您的工作更简单,生活更轻松。

关于命名的另一个重要点是类型名称应该与变量名称不同。

常见的做法是使用后缀标记类型(请注意stdint.h_t ,您将在其中获得uint8_t )。

在许多地方, struct类型的末尾将带有_s ,枚举将具有_e ,通常应避免使用指针类型。

这是非常误导的:

typedef struct point { double x; double y; } point
// ...
void func(void) {
   point point = {0,1}; // ... totally legit, right?!
   // many lines of code later...
   if(point.y) { // confusing, might be mistaken for a bug.
      // ...
   }
}

更好的方法是:

typedef struct point { double x; double y; } point_s
// ...
void func(void) {
   point_s point; // ... less confusing
}

有些人使用后缀_t ,但由于保留它,所以我会避免使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM