2010-07-28 10 views
1

typedef void (callback) (int * p1, sStruct * p2); J'ai la déclaration suivante, en C. Comment puis-je compiler cette déclaration récurrente sans recevoir d'erreur?récurrente déclarer en c

Pour le moment, je reçois: erreur de syntaxe avant le symbole '*' en première ligne.

+0

Qu'est-ce que c'est «récurrent»? Voulez-vous dire déclaration circulaire ou auto-référencement? – progrmr

Répondre

11

Vous pouvez transmettre-déclarer la structure:

/* Tell the compiler that there will be a struct called _sStruct */ 
struct _sStruct; 

/* Use the full name "struct _sStruct" instead of the typedef'ed name 
    "sStruct", since the typedef hasn't occurred yet */ 
typedef void (callback)(int *p1, struct _sStruct *p2); 

/* Now actually define and typedef the structure */ 
typedef struct _sStruct 
{ 
    callback *funct; 
} sStruct; 

Edit: Mise à jour pour correspondre à changement de noms de type de la question.

Aussi, je suggère fortement de ne pas donner à la structure l'identifiant _sStruct. Les noms globaux commençant par _ sont des noms réservés, et leur utilisation pour vos propres identifiants peut entraîner un comportement indéfini.

+1

Vous pouvez également transférer le 'typedef' en une fois, quelque chose comme' typedef struct sStruct sStruct; '. Et n'hésitez pas à donner le même nom à la structure et au 'typedef'. –

Questions connexes