避免使用类似的结构重复代码C

温妮·西夫特(Vinnie Sift)

我在一个有3个相似结构的程序中工作。

typedef struct{
  int id;
  Person p;
}Client;

typedef struct{
  int id;
  Person p;
}Employee;

typedef struct{
  int id;
  Person p;
}Provider;

生成的数据保存在三个不同的文件中。函数使用的大多数信息来自人p。而且都是相似的(创建客户/雇员/提供者,列出它们,等等)。问题在于,由于它们是三种不同的结构,因此我必须为每个作业重复执行三次代码,以从每个Person中提取信息或创建数组以对文件进行排序。我无法以某种方式来避免使用正确类型的单个代码的问题。示例代码:

`

int extractNameProvider(){
  FILE *arch;
  int ret=0;
  Provider pro;
  arch=fopen("fileP","rb");
  if(arch!=NULL){
    fread(&cli,sizeof(Provider),1,arch);
    printf("%s",pro.p.name);
    fclose(arch);
  }
  else{
    ret=-1;
  }
  return ret;
}

int extractNameClient(){
  FILE *arch;
  int ret=0;
  Client cli;
  arch=fopen("fileC","rb");
  if(arch!=NULL){
    fread(&cli,sizeof(Client),1,arch);
    printf("%s",cli.p.name);
    fclose(arch);
  }
  else{
    ret=-1;
  }
  return ret;
}

int extractNameEmployee(){
  FILE *arch;
  int ret=0;
  Employee emp;
  arch=fopen("fileE","rb");
  if(arch!=NULL){
    fread(&emp,sizeof(Employee),1,arch);
    printf("%s",emp.p.name);
    fclose(arch);
  }
  else{
    ret=-1;
  }
  return ret;
}
大卫·拉涅里(David Ranieri)

如果所有的structS皆相等,就可以共享一个基础struct,并typedef在你的文件,是这样的:

/* base.h */
struct BasePerson{
  int id;
  Person p;
};

/* client.h */
#include "base.h"
typedef struct BasePerson Client;

/* employee.h */
#include "base.h"
typedef struct BasePerson Employee;

/* provider.h */
#include "base.h"
typedef struct BasePerson Provider;

然后:

int extractNamePerson(char *file){
  FILE *arch;
  int ret=0;
  struct BasePerson person;
  arch=fopen(file,"rb");
  if(arch!=NULL){
    fread(&person,sizeof(struct BasePerson),1,arch);
    printf("%s",person.p.name);
    fclose(arch);
  }
  else{
    ret=-1;
  }
  return ret;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何避免多次重复类似的代码?

Golang:代码重复和类似的结构

避免使用大量类似的构造函数对数据类型进行代码重复

如何避免在jQuery中重复类似的代码?

如何组织类似的结构以避免重复而不牺牲内存

使用模板来避免类似的功能

如何在避免代码重复的同时从两个相似的 C++ 结构中动态选择一个成员?

GCC在类似的体系结构上使用“ -march = native”发出完全不同的代码

如何使用接口/类似的东西来清理Java中的重复代码

使用两个相似的集合视图单元格,从而避免代码重复

在Go中使用类似的指针结构来分配结构

C#避免重复代码,并使用通用代码

当使用类似方法的控制器时,如何避免代码重复?

避免为不同类中使用的类似背景工作人员重复代码

如何使用结构制作枚举或类似的东西?

使用C ++ 11复制和移动时避免代码重复

C#。使用重载时如何避免代码重复

如何避免 React 中 3 个类似按钮的代码重复?

如何避免在PHP中重复MySQL查询代码的类似部分?

减少两个类似的功能以避免重复

使用多个类似的“ while”语句来缩短代码

类似结构的 Rust 代码重复数据删除

在这种情况下如何避免多次编写类似的代码?

与 sumif 类似的连接代码

空接口访问结构属性,以避免代码重复

避免类似的控制器动作

C#避免装箱和重复代码

避免代码重复的C#通用方法

C ++函子用法,避免代码重复