C ではなぜ構造体を頻繁に typedef する必要があるのでしょうか? 質問する

C ではなぜ構造体を頻繁に typedef する必要があるのでしょうか? 質問する

私は以下のような構造を持つプログラムを数多く見てきました。

typedef struct 
{
    int i;
    char k;
} elem;

elem user;

なぜそんなに頻繁に必要なのでしょうか? 具体的な理由や適用可能な分野はありますか?

ベストアンサー1

structGreg Hewgill が言ったように、typedef を使用すると、あちこちに記述する必要がなくなります。キー入力が節約されるだけでなく、少し抽象化が進むため、コードがきれいになります。

次のようなもの

typedef struct {
  int x, y;
} Point;

Point point_new(int x, int y)
{
  Point a;
  a.x = x;
  a.y = y;
  return a;
}

「struct」キーワードをあちこちで見る必要がなくなると、よりすっきりして、言語に「Point」という型が実際に存在するように見えます。 の後は、それがtypedef当てはまると思います。

また、あなたの例 (および私の例) では 自体に名前を付けていませんがstruct、実際に名前を付けると、不透明な型を提供するときにも便利です。たとえば、ヘッダーに次のようなコードがあります。

typedef struct Point Point;

Point * point_new(int x, int y);

次に、struct実装ファイルに定義を指定します。

struct Point
{
  int x, y;
};

Point * point_new(int x, int y)
{
  Point *p;
  if((p = malloc(sizeof *p)) != NULL)
  {
    p->x = x;
    p->y = y;
  }
  return p;
}

後者の場合、Pointの定義はヘッダーファイルのユーザーからは隠されているため、Pointを値で返すことはできません。これは、GTK+、 例えば。

更新情報typedef:隠蔽のためにこの関数を使うのは良くないと考えられている、高く評価されているCプロジェクトもあることに注意してくださいstruct。Linuxカーネルはおそらくそのようなプロジェクトの中で最もよく知られています。LinuxカーネルコーディングスタイルドキュメントLinus の怒りの言葉に対して。:) 私が言いたいのは、質問の中の「すべき」は、結局のところ、決して不変ではないということだ。

おすすめ記事