誰かが詳細に説明できる場合、これら2つの宣言の違いは何ですか。
typedef struct atom {
int element;
struct atom *next;
};
そして
typedef struct {
int element;
struct atom *next;
} atom;
typedef
の目的は、型指定に名前を付けることです。構文は次のとおりです。
typedef <specification> <name>;
それが終わったら、言語の組み込み型のように<name>
を使用して変数を宣言できます。
最初の例では、<specification>
はstruct atom
で始まるすべてですが、その後に<name>
はありません。そのため、型仕様に新しい名前を付けていません。
struct
宣言で名前を使用することは、新しい型を定義することと同じではありません。その名前を使用したい場合は、常にその前にstruct
キーワードを付ける必要があります。したがって、次のように宣言した場合:
struct atom {
...
};
新しい変数は次のように宣言できます。
struct atom my_atom;
しかし、簡単に宣言することはできません
atom my_atom;
後者の場合、typedef
を使用する必要があります。
これはCとC++の注目すべき違いの1つであることに注意してください。 C++では、struct
またはclass
タイプdoesを宣言すると、変数宣言で使用できますが、 typedef
が必要です。 typedef
は、C++では、関数ポインターなど、他の複合型の構成に引き続き役立ちます。
あなたはおそらくRelatedサイドバーのいくつかの質問を見直す必要があります、それらはこの主題の他のいくつかのニュアンスを説明します。
これは正常ですstructure declaration
struct atom {
int element;
struct atom *next;
}; //just declaration
object
の作成
struct atom object;
struct atom {
int element;
struct atom *next;
}object; //creation of object along with structure declaration
そして
これはstruct atom
タイプのタイプ定義です
typedef struct atom {
int element;
struct atom *next;
}atom_t; //creating new type
ここでatom_t
はstruct atom
のエイリアスです
オブジェクトの作成
atom_t object;
struct atom object; //both the ways are allowed and same
Typedefキーワードの一般的な構文は次のようになります:typedef existing_data_type new_data_type;
typedef struct Record {
char ename[30];
int ssn;
int deptno;
} employee;