BifaceMcLeOD |
gilou a écrit a écrit :
Un struct, c'est a priori fait pour regrouper des donnees heterogenes. De ce fait il n'y a pas de methode generale pour parcourir tous les champs d'un struct un par un.
|
Si ça existe, ça s'appelle la "reflection" en anglais. Etre capable d'interroger la structure d'une structure. Mais c'est un concept typiquement objet, en C, c'est donc impossible.
gilou> Les unions en C sont crades et dangereuses parce que tu ne sais jamais a priori quel est le bon champ à utiliser. En Pascal (et aussi Ada d'ailleurs), l'équivalent existe (record case), mais il est conditionné à un champ sélecteur (exemple en Ada, syntaxe de mémoire) :
Code :
- type Personne is
- record
- nom : string (1 .. 256);
- prenom : string (1 .. 256);
- case sexe : boolean is
- when true =>
- barbe : boolean;
- when false =>
- nom_jeune_fille : string (1 .. 256);
- end case;
- end record;
|
Ici, il devient interdit (par le compilateur) d'accéder à "barbe" si "sexe" vaut "false". En C, on peut faire la même chose, il faut le simuler. |