C ++およびtypedefの想定以前は、型付き構造を取得する唯一の方法はこの構文を使用することであり、自己型リンクノードを取得する唯一の方法でした。
struct Foo
{
int val;
struct Foo *link;
};
Cでは、これにはFooの使用法が次のようになっている必要があります。
struct Foo foo;
struct Foo *foo_ptr;
等..
typedefは、これを行うことでこれを支援しました。
typedef struct Foo
{
int val;
struct Foo *link;
} Foo;
今からあなたはこれを行うことができます:
Foo foo; // same as struct Foo
Foo *foo_ptr; // same as struct Foo *
注:typedefを使用してaをエイリアスすることstruct Name
は、エイリアスとしてに制限されませんName
。Yoはこれを行うのにも完全に有効でした:
typedef struct Foo
{
int val;
struct Foo *link;
} Bar;
そして今、以下が実行可能です。
struct Foo foo;
Bar bar;
struct Foo *fooptr = &bar;
Bar *barptr = &foo;
本当に、あなたがその日にCでプログラムしたことを望みますね?おそらく物事をクリアしないでしょうが、うまくいけば少し灰色が少なくなります。