9
votes

Quand utiliser Typedef en C?

Quelqu'un peut-il me dire quand utiliser Typedef en C? Dans le code suivant, je reçois un avertissement par gcc code>:

Avertissement: spécificateur de classe de stockage inutile dans la déclaration vide code> p>

typedef struct node
{
  int data;
  struct node* forwardLink;
} ;


1 commentaires

Supprimé C ++ . C et C ++ sont des langues différentes. "Quand utiliser Typedef en C ++" est une question distincte avec une réponse différente.


6 Réponses :


12
votes

La syntaxe de Typedef code> est Typedef code>; Il rend le type accessible via le nom code> code>. Dans ce cas, vous avez seulement spécifié un type type code>, et aucun nom nom code>, de sorte que votre compilateur se plaint.

Vous voulez probablement P>

typedef struct node
{
  int data;
  struct node* forwardLink;
} node;


0 commentaires

2
votes

Utilisez Typedef lorsque vous souhaitez utiliser un autre nom pour un type, par exemple. une structure.

Dans votre cas, au lieu d'utiliser struct noeud pour déclarer une variable, vous pouvez utiliser à la place noeud , sous forme de noeud de structure .

mais vous manquez l'alias de votre déclaration: xxx

Ceci accomplit la même chose mais pourrait mieux illuminer la cause de Votre erreur: xxx


0 commentaires

10
votes

alors ..

Vous pouvez le faire: xxx

pour définir un objet que vous pouvez utiliser comme struct noeud .

Comme ceci: xxx

Cependant, disons que vous vouliez vous y référer comme juste noeud . Ensuite, vous pourriez faire: xxx

ou xxx

puis utilisez-le comme: xxx


2 commentaires

Est-ce que ce dernier est valide c? Je penserais que vous devriez faire Typedeft Struct node {int Data; Nœud de structure * ForwardLink;} noeud; ou somesuch (certains ou même la plupart des dialectes C peuvent permettre la même orthographe pour le nom Nom Nom et Typedef Nom, Mais la plupart des codes que j'ai vus utiliseraient des noms légèrement différents; les dialectes C Je suis familière avec ne pas autoriser un nom défini uniquement en tant que Typedef à utiliser comme struct nom).


@supercat: Si vous avez vu mes commentaires précédents, ignorez-les. Vous avez complètement raison. J'ai échangé le membre du membre struct * à un vide * , qui ne serait pas particulièrement utile dans le cas de l'OP, il explique toujours la situation générique.



1
votes
struct node *p;

0 commentaires

1
votes

Typedef est utilisé pour définir le type de données utilisateur. Par exemple

integer a;// a would be declared as int only


0 commentaires

0
votes

Pour les tenants qui sont une liste de valeurs possibles de certaines variables:

typedef enum {BLACK=0, WHITE, RED, YELLOW, BLUE} TColor;


0 commentaires