设计任务列表程序的参数和函数返回值

时间:2010-09-11 02:48:01

标签: c code-organization

我正在开发一个任务列表程序,在我上课之前刷新我的C.我有两个结构,任务和任务列表。

这是任务结构:

typedef struct task
{
  char name[100];
  bool completed; /* bool is described as an enum in an included header file */
  date due_date; /* date is a described as a struct in an included header file */
} task;

我有以下工作职能:

  • 列表项
  • init_tasklist():初始化任务列表变量
  • add_task():将任务添加到任务列表
  • delete_task():从任务列表中删除给定的任务
  • print_tasklist():打印出类似于普通待办事项列表的任务列表,其中包含每个项目的复选框,名称和截止日期
  • delete_tasklist():删除给定的任务列表
  • print_task():打印出给定任务的详细信息

我的问题与哪些变量作为函数的参数和返回的内容有关。

我想将此任务列表用于cli接口,然后将其更改为GUI,因此我希望能够轻松切换。

首先,我有add_task()malloc() - 一个新任务并返回一个指向该任务的指针,然后delete_tasklist()以递归方式通过并释放内存,因为它删除了任务列表。我从OOP和Java的经验中得到了这种方法。

在C中设计这个的最佳方法是什么?

add_task()函数是否应该将一个任务结构添加到列表中,或者只是应该在任务中的变量并让add_task()函数初始化它?

我是否应该编写一个get_task()函数,该函数返回指向具有给定名称的任务的指针,如print_task()和delete_task(),这将带有一个任务指针,或者那些是否需要char指针并找到任务自己?

有关如何设计这些功能的I / O的任何指导都非常有用。

1 个答案:

答案 0 :(得分:2)

由于您的数据结构是一个任务列表,因此使用任务结构调用add_task()更简洁(任务列表不必知道任务结构的内部表示)。

使用create_task()方法接收任务字段并返回填充了这些字段的任务结构可能很方便。

逻辑上,create_task()属于任务结构,而add_task()属于任务列表。 (例如,如果您使用OO语言编写,则会TaskList.AddTask(task)Task.Create(name, dd, isCompleted)

get_task()方法,您需要多次使用(正如您所说,print_stack()delete_stack())。 将此代码封装在函数中显然比代码重复更好。 (例如,如果您在此代码中发现错误,则必须先修复一次,而不是在程序中的任何位置进行搜索)。此外,由于此代码具有“独立意义”,因此具有执行它的功能很方便。