重複の可能性:
C++でのstruct、typedef structの目的、typedefstructと
structの定義
Cで構造体を宣言する方法は2つあることを私は知っています
struct point{
int x, y;
};
と:
typedef struct{
int x, y;
} point;
しかし、これら2つのメソッドの違いは何ですか?いつtypedefメソッドを使用し、他のメソッドは使用しないのでしょうか?
重複の可能性:
C++でのstruct、typedef structの目的、typedefstructと
structの定義
Cで構造体を宣言する方法は2つあることを私は知っています
struct point{
int x, y;
};
と:
typedef struct{
int x, y;
} point;
しかし、これら2つのメソッドの違いは何ですか?いつtypedefメソッドを使用し、他のメソッドは使用しないのでしょうか?
違い:
point p;
、2番目のものでのみ使用できます。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)型がたくさんあります。実装のみが構造体メンバーを認識し、気にします。
もちろん、コンパイラは構造体を割り当てるために構造体のフィールドを知る必要があります。ただし、不透明な構造体へのポインタのみを使用する場合は、構造体(つまり、中括弧で囲まれたフィールド)を宣言する必要はありません。
最初の形式では、変数宣言は次のようにする必要があります。
struct point A;
2番目の形式ではstruct
、
point B;