なので、この2つの違いを知りたいです。
struct Record {
int ID,
char *name
}Student;
typedef struct Record {
int ID,
char *name
}Student;
最初の Student は構造体変数であることを知っています。しかし、2 番目の Student は変数ですか、それとも単なる型名ですか?
typedef struct Record { ... } Student;
struct Record
これにより、という名前の typedef とともに新しい型が作成されStudent
ます。Student
のエイリアスですstruct Record
。これらは同一の変数宣言になります。
struct Record studentRecord;
Student studentRecord;
struct
通常、変数を宣言するときにキーワードを削除できるように、typedef は構造体と同じ名前になります。
typedef struct Record { ... } Record;
Record record; // Don't need to write "struct Record".
2 番目の例のtypedef
,Student
は型名です。
を使用すると、キーワードが削除されtypedef
た場合に変数の名前が表示される場所に型の名前が表示されます。typedef
int var_name;
typedef int type_name;
struct SomeType { ... } some_var;
typedef struct SomeType { ... } SomeType;
C では、typedef
名前は別の型名のエイリアスであり、新しい型そのものではないことに注意してください。名前と同時に構造体型を定義する場合typedef
、正式な規則は型が定義されているstruct SomeType { ... }
ことです (たとえば、型名がその型にエイリアスされる前に (たとえば によってtypedef struct SomeType { ... } SomeType;
))。