2012-02-29 7 views
3

typdef Cの構造体は、私は、次のプログラムを書いた:このCコードはなぜコンパイルされますか?

typedef struct blahblah { 
    int x; 
    int y; 
} Coordinate; 

int main() { 
    Coordinate p1; 
    p1.x = 1; 
    p1.y = 2; 

    //blah blah has not been declared as a struct, so why is it letting me do this? 
    struct blahblah p2; 
    p2.x = 5; 
    p2.y = 6; 
} 

誰もが何が起こっているのか私に説明できますか?

+5

私はかなり理解していません。 'struct blahblah'は確かに構造体として宣言されています。これはあなたの例の一番上にあります。 –

答えて

10

あなたが言った:

何とか何とかは実際に、構造体として

を宣言されていない、それはあります

typedef struct blahblah { 
    int x; 
    int y; 
} Coordinate; 

これはtypedefでCoordinate、との両方でありますstruct blahblahの定義。どのような定義が言うことである:

  • struct blahblah
  • と呼ばれるデータ型を定義するには二つの部材、int xint yを持っています。
  • また、あなたはあなたのtypedefで構造体としてblahblahを宣言struct blahblah
0

と同等ですCoordinateと呼ばれるタイプの定義を行います。 typedefはstruct blahblahを参照する簡単な方法です。しかしstruct blahblahが存在するので、typedefを与えることができます。あなたの構造体宣言が

struct blahblah { 
    int x; 
    int y; 
}; 
typedef struct blahblah Coordinate; 

に相当する

2

これは、2つの構造体タイプの名前(struct blahblah)とCoordinateを作成するので、両方の型の名前は、変数を宣言するための許容されます。

2

typedefは新しいユーザー定義データ型を定義しますが、は古い定義を無効化しません。たとえば、typedef int INTは、intを無効にしません。同様に、あなたのblahblahは依然として有効な定義済み構造です!座標はちょうど新しいタイプです!

0

typedefはあるタイプの別名を作成するために使用されます。あなたは実際にtypedef自体に 'struct blahblah'を宣言しています。ちょっと混乱しますが、@Timothyや他の人はそれが有効な定義だと指摘しています。

関連する問題