J'aimerais pouvoir utiliser le préprocesseur, mais l'entrée vient à l'exécution. J'ai essayé un typedef conditionnel, ça ne marche pas. Ou déclaration conditionnelle, ne fonctionne pas. Bien que je ne m'attendais pas vraiment à eux non plus. Et puisque tout le code qui suit est exactement le même, je ne veux pas avoir à le réécrire deux fois ... une fois pour chaque struct.Compatibilité entre 2 structs
Existe-t-il un moyen de faire cela en C? Ou approche différente, avec le même résultat. Toutes mes recherches google m'ont amené à des modèles C++. Si je ne suis pas clair, cela aidera peut-être:
#include <stdio.h>
struct a32 {
short bits;
unsigned long val;
// more values, not necessarily in the same order
};
struct a64 {
short bits;
unsigned long long val;
// etc...
};
int main(void) {
struct a32 mystruct;
// read mystruct from somewhere
if(mystruct.bits == 64) {
// then I need mystruct to be a64
// re-read mystruct
}
// exact same code for both structs
printf("%d\n", sizeof(mystruct.val));
return 0;
}
Toute aide serait appréciée.
Cela aurait aussi été ma solution :) Je pense qu'il ne devrait pas y avoir de problème avec le rembourrage parce que l'union sera au moins aussi grande que le plus grand type déclaré dans ce droit? – Dan
Merci, je pense que ça va faire l'affaire. – olly
La lecture de la structure complète est une mauvaise idée. Vous devez d'abord lire les "bits", puis "basculer" sur la valeur pour remplir le reste des données. – James