Auparavant j’avais une structure C
typedef struct c { int cc; }CS;
J’avais l’habitude d’appeler une fonction de bibliothèque, telle que int GetData (CS * x) qui me renvoyait la structure C ci-dessus avec des données.
GetData(CS *x)
L’appel de fonction ressemblait à:
CS CSobj; GetData(&CSObj);
Maintenant, il y a deux structures dites C et D
typedef struct c { int cc; }CS; CS CSobj; typedef struct d { int dc; int dd; }DS; DS DSobj;
La fonction GetData () a été modifiée en GetData (void * x). Je dois appeler la fonction de bibliothèque dire int GetData (void * x) qui me renverra l’une des structures ci-dessus via ce paramètre void *. Le type de retour de la fonction indique quelle structure est renvoyée.
Le problème est lors de l’appel de la fonction GetData () comment et quel paramètre à passer car je ne sais pas quelle structure la fonction retournera. Un moyen de sortir de ce problème?
Vous pourriez utiliser un syndicat
// define union of two structs union DorC { DS DSobj; CS CSobj; } CorD; // call using union rc = GetData(&CorD); if (rc == Ctype) { // use CorD.CSobj; } else { // use CorD.DSobj; }
Avertissement code non vérifié non vérifié!