0

其中哪一个是更高效和更好的代码?还是有其他方法我应该这样做?

typedef struct foo {
int width;
int height;
} foo;

...下面两个示例中的 typedef,但它实际上是一个任意结构...

foo *new_foo (int width, int height) {

  foo *f
  if ((f = malloc(sizeof(foo)))==NULL) return NULL;

  f->width = width;
  f->height = height;

  return foo;
}  


void del_foo (foo *f) {free(f);}


int main () {

  int width = 3;
  int height = 4; // arbitrary values

  foo *f   
  f = new_foo(width, height)

  // do something with foo here      

  del_foo(f);
}

或者

int new_foo (foo *f, int width, int height) {

  f->width = width;
  f->height = height;

  return 0;
}  


int main () {

  int width = 3;
  int height = 4; // arbitrary values

  foo *f
  if ((f = malloc(sizeof(foo)))==NULL) return NULL;   
  new_foo(f, width, height)

  // do something with foo here      

  free(f);
}

谢谢!对于任何错别字,我深表歉意。

4

1 回答 1

1
foo* new_foo(int width, int height)

对于名称中带有的函数似乎更可取newnew这意味着对具有 C++ 经验的人进行动态分配)。

void foo_init(foo f, int width, int height)

如果您想允许客户端foo在堆栈和堆上声明对象,那将是合理的。您也可以选择同时提供两者,new_foo作为mallocfoo_init.

如果您提供一个分配内存的函数,那么提供一个销毁对象的函数也是合理的 - foo_destroy(foo )del_foo在您的问题中?)

最后一点,次要的一点 - 如果您将它们的名称作为它们操作的结构的前缀而不是在末尾添加结构(即foo_new比 更常见new_foo) ,您可以更明显地对相关函数进行分组

于 2013-02-24T22:31:04.573 回答