web-dev-qa-db-fra.com

Déclarations typedef/struct

Quelle est la différence entre ces deux déclarations, si quelqu'un peut expliquer en détail:

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

et

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

typedef a pour but de donner un nom à une spécification de type. La syntaxe est la suivante:

typedef <specification> <name>;

Une fois que vous avez terminé, vous pouvez utiliser <name> de la même manière que tous les types intégrés du langage pour déclarer des variables.

Dans votre premier exemple, le <specification> est tout ce qui commence par struct atom, mais il n'y a pas de <name> après celui-ci. Donc, vous n'avez pas donné un nouveau nom à la spécification de type.

Utiliser un nom dans une déclaration struct n'est pas la même chose que définir un nouveau type. Si vous souhaitez utiliser ce nom, vous devez toujours le précéder du mot clé struct. Donc si vous déclarez:

struct atom {
    ...
};

Vous pouvez déclarer de nouvelles variables avec:

struct atom my_atom;

mais vous ne pouvez pas déclarer simplement

atom my_atom;

Pour ce dernier, vous devez utiliser typedef.

Notez que c'est l'une des différences notables entre C et C++. En C++, la déclaration d'une variable struct ou class de type ne vous permet de l'utiliser dans des déclarations de variable, vous n'avez pas besoin d'une variable typedef. typedef est toujours utile en C++ pour d'autres constructions de types complexes, telles que les pointeurs de fonction.

Vous devriez probablement regarder par-dessus certaines des questions dans Connexions sidebar, elles expliquent certaines autres nuances de ce sujet.

12
Barmar

C'est Normal structure declaration 

  struct atom {
      int element;
      struct atom *next;
    };    //just declaration

création de object

 struct atom object; 

  struct atom {
      int element;
      struct atom *next;
    }object;    //creation of object along with structure declaration

Et

C'est la définition de type de struct atom type 

typedef  struct atom {
  int element;
  struct atom *next;
}atom_t;  //creating new type

Ici atom_t est un alias pour struct atom 

création d'objet

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

La syntaxe générale du mot clé typedef sera la suivante: typedef existing_data_type new_data_type;

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