Comment dois-je consulter un typedef dans un fichier d'en-tête?
J'ai un fichier source où un typedef struct est défini:
typedef struct node {
char *key;
char *value;
struct node *next;
} *Node;
Dans ce module, il y a quelques fonctions qui opèrent sur un Nœud et ont Nœud comme type de retour. Ce que je suis censé écrire dans le fichier d'en-tête pour cette typedef?
Est-il correct d'écrire juste
typedef *Node;
dans l'en-tête?
- pourquoi ne pas écrire l'ensemble de la structure de votre fichier d'en-tête lui-même..et l'utilisation
*Node
dans votre fichier source.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser:
Mais je ne vous le conseille cacher le pointeur dans la déclaration de type. Il est plus instructif de disposer de cette information dans la déclaration de la variable.
module.c:
module.h:
la déclaration de la variable de pointeur quelque part:
typedef struct node node;
et de se débarrasser de la caps étrangeté.La déclaration
est pas valide. Il manque le type. Une bonne façon de regarder
typedef
est à retenir c'est qu'un espace de stockage de classe prescripteur, ainsi, il fonctionne comme toutes les autres déclarations. Si vous souhaitez créer un aliasNode
pour le typestruct node *
, il suffit de déclarer un pointeur vers un noeud et le nom qu'ilNode
:struct node *Node;
Et maintenant ajouter un
typedef
mot-clé:typedef struct node *Node;
En général, pour créer un alias pour un type, il suffit de déclarer une variable de ce type avec le même nom que le nom de l'alias que vous souhaitez, puis ajouter un
typedef
mot-clé. Même compliquétypedef
déclarations peuvent être facilement approché de ce genre.Donc,
typedef *Node;
est pas valide, c'est comme l'écriturej;
sans précisant son type.Maintenant, vous ne pouvez pas
typedef
deux fois la même chose. Soit vous aurez à prendre latypedef
destruct node
déclaration et le déplacer vers le fichier d'en-tête, ou que vous déplacez l'ensemble de latypedef
+ déclaration de structure de l'en-tête de fichier. La première solution est généralement ce que vous voulez, car elle permet à certains de se cacher de l'information. Donc, ma suggestion est de l'indiquer dans le fichier d'en-tête:Et de garder cela dans le fichier source:
Noter que j'ai créé l'alias
Node_ptr
, pasNode
. C'est une bonne pratique, afin de transmettre l'idée que laNode_ptr
est un pointeur.