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)

new名前に が含まれる関数が望ましいと思われます ( newC++ の経験がある人には動的割り当てを意味します)。

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 に答える