[1719] Re:構造体へのポインタを返す関数
投稿者:774RR
2011/03/21 19:41:51
すばらしい。 typedef を使っているあたりが素敵すぎる。
というわけで第三者読者へのふぉろーを追加。
typedef は新しい型を作るのではなくて、既存の型への別名を作る。
提示の例だと名前のない構造体(便宜上 anonymous_struct_1 と名づける)
struct anonymous_struct_1 { int val; };
に対して、別名1 KOUZOU1 別名2 KOUZOU2 をつけているだけ。
なので KOUZOU1 と KOUZOU2 はどちらも struct anonymous_struct_1 であり、
関数宣言のほうもエラーにならない。
typedef struct { int x; } KOUZOU1, *PKOUZOU2;
KOUZOU1 *func();
PKOUZOU2 func();
int main() { return 0; }
これもエラーにならない。
一方で KOUZOU3 は struct anonymous_struct_2 { int val; }; の別名になるので
これは KOUZOU1, 2 とは別のものになり、宣言が矛盾するエラー。