web-dev-qa-db-ja.com

Typedef / struct宣言

誰かが詳細に説明できる場合、これら2つの宣言の違いは何ですか。

typedef struct atom {
  int element;
  struct atom *next;
};

そして

typedef struct {
  int element;
  struct atom *next;
} atom;
13
user2780061

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サイドバーのいくつかの質問を見直す必要があります、それらはこの主題の他のいくつかのニュアンスを説明します。

13
Barmar

これは正常です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_tstruct atomのエイリアスです

オブジェクトの作成

atom_t object;      
struct atom object; //both the ways are allowed and same
14
Gangadhar

Typedefキーワードの一般的な構文は次のようになります:typedef existing_data_type new_data_type;

typedef struct Record {
    char ename[30];
     int ssn;
    int deptno;
} employee;
0
Deep