0

重複の可能性:
C++でのstruct、typedef structの目的、typedefstructと
structの定義

Cで構造体を宣言する方法は2つあることを私は知っています

struct point{
    int x, y;
};

と:

typedef struct{
    int x, y;
} point;

しかし、これら2つのメソッドの違いは何ですか?いつtypedefメソッドを使用し、他のメソッドは使用しないのでしょうか?

4

3 に答える 3

2

違い:

  1. 最初のものは有効なC89です。
  2. 最初のものは構造体のラベル(「ポイント」)を完全な型定義にしないのでpoint p;、2番目のものでのみ使用できます。
  3. 私たちのCプログラミングの神であるLinusTorvaldsは、構造体にtypedefを使用しないことを強くお勧めします(実際のフィールドを非表示にして不透明な構造体の背後に入力する必要がある場合を除く)。
于 2012-08-26T09:16:47.433 に答える
1

Cstructでaを宣言する方法は、キーワードを使用し、オプションで構造体の名前を続け、その後に中かっこで囲んだメンバーフィールドリストを続ける方法が1つだけあります。だからあなたは持つことができます:struct

  struct point_st {
     int x, y;
  };

point_st構造の名前(またはタグ)は次のとおりです。構造体名は、Cでは型とは異なる名前空間を持っていることに注意してください(これはC ++では異なります)。_stそのため、上記のように構造名に接尾辞を付ける習慣があります。

typedefを使用して(独立して)型名を定義できます。

  typedef struct point_st Point;

typedefどのCタイプでも使用できます、ところで)。

たとえば、GtkとGlibには、そのような不透明な構造である不透明(OPAQUE)型がたくさんあります。実装のみが構造体メンバーを認識し、気にします。

もちろん、コンパイラは構造体を割り当てるために構造体のフィールドを知る必要があります。ただし、不透明な構造体へのポインタのみを使用する場合は、構造体(つまり、中括弧で囲まれたフィールド)を宣言する必要はありません。

于 2012-08-26T09:18:39.470 に答える
0

最初の形式では、変数宣言は次のようにする必要があります。

struct point A;

2番目の形式ではstruct

point B;
于 2012-08-26T09:19:24.170 に答える