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;
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.
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
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;