Initialisation d'une structure
Résolu
SalimRT
Messages postés
15
Statut
Membre
-
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
1 réponse
-
Salut SalimRT,
Je suppose qu' "un type enregistrement Personne" se réfère sûrement à un type créé par le programme avec un typedef sur un struct comprenant les membres de différents types mentionnés.
Tu as des exemples là : https://www.tutorialspoint.com/cprogramming/c_typedef.htm
Note que ce tutoriel n'utilise pas de typedef, donc la variable est déclaréestruct Books Book1;
avant d'être utilisée. J'imagine que dans ton cas, tu auras déclaré un typedef Personne qui sera un alias sur ta struct, et que dans ton cas la déclaration serait du typePersonne une_personne;
pour déclarer ta personne.
Ensuite, l'initialisation suit les mêmes principes, car typedef ne fait que créer un alias sur la struct.
Dal-
-
tu soulèves une question intéressante
quand tu écris :
struct book { char title[50]; char author[50]; char subject[100]; int book_id; };
tu peux déclarer une variablestruct
comme cela :struct book bibliotheque[100];
. En lisant cette déclaration, je sais que je déclare un tableau de 100struct
, et que lastruct
"book" a des membres.
typedef
permet de créer un alias sur un type, unestruct
ou autre chose, en créant un identifiant pour un type non standard.
Par exemple, avant la révision du C99 introduisant le type standardbool
dans le langage C (https://en.cppreference.com/w/c/types/boolean), le type booléen était simulé par certains programmeurs avec untypedef
sur unenum
, par exemple :typedef enum boolean { FALSE, TRUE} bool_t;...
Lorsque tu vois dans un code :truc machin;
, tu sais juste que tu déclares unmachin
, avec un type non standardtruc
qui a dû être définit quelque part avec untypedef
(ou même un#define
, et là on frise l'horrible) et qui peut être, en fait, de n'importe quel type (unenum
comme ici, unestruct
, unint
, un pointeur surchar
,...). L'information est masquée.
C'est un choix du programmeur que de masquer, ou non, cette information. Parfois, c'est utile pour créer des types opaques, où le programmeur n'a pas besoin de savoir exactement les détails de l'implémentation (par exemple, dans la bibliothèque standard du C, le typeFILE
), parce que tous ces détails sont gérés par la bibliothèque et que le programmeur n'a pas à s'en soucier (en fait on ne veut pas qu'il y mette son nez pour ne pas interférer avec l'implémentation).
Dans le cas de struct, à mon sens, cela ne se justifie pas... mais c'est une affaire de style.
Certains n'aiment pas du tout lestypedef
, par exemple ils sont très mal vus par les contributeurs au noyau Linux (Linux kernel coding style : https://www.kernel.org/doc/html/v4.11/process/coding-style.html)
D'autres les aiment bien, et ils peuvent être pratiques pour éviter d'avoir des types longs à taper.
En ce qui te concerne, si l'exercice te demande de le créer, fais le :-)
Et dans la vraie vie, si tu programmes seul, tu fais tes propres choix, si tu programmes sur un projet existant, tu adaptes ton style au style du projet (ou tu le définis en concertation avec les autres contributeurs si tu arrives suffisamment en amont).
-
