Initialisation d'une structure

Résolu/Fermé
SalimRT Messages postés 14 Date d'inscription lundi 31 décembre 2018 Statut Membre Dernière intervention 24 février 2019 - Modifié le 4 janv. 2019 à 16:59
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 5 janv. 2019 à 18:03

comment initialiser cette structure avec ces données
Et merci

1 réponse

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 4 janv. 2019 à 17:13
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ée
struct 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 type
Personne 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
1
SalimRT Messages postés 14 Date d'inscription lundi 31 décembre 2018 Statut Membre Dernière intervention 24 février 2019
5 janv. 2019 à 10:16
Merci Dal
mais est-ce qu'il y a des moments que je dois travailler avec struct ou typedefstruct? et qui est la plus simple et utiliser ?
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 5 janv. 2019 à 18:17
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 variable
struct
comme cela :
struct book bibliotheque[100];
. En lisant cette déclaration, je sais que je déclare un tableau de 100
struct
, et que la
struct
"book" a des membres.

typedef
permet de créer un alias sur un type, une
struct
ou autre chose, en créant un identifiant pour un type non standard.

Par exemple, avant la révision du C99 introduisant le type standard
bool
dans le langage C (https://en.cppreference.com/w/c/types/boolean), le type booléen était simulé par certains programmeurs avec un
typedef
sur un
enum
, par exemple :
typedef enum boolean { FALSE, TRUE} bool_t;
...

Lorsque tu vois dans un code :
truc machin;
, tu sais juste que tu déclares un
machin
, avec un type non standard
truc
qui a dû être définit quelque part avec un
typedef
(ou même un
#define
, et là on frise l'horrible) et qui peut être, en fait, de n'importe quel type (un
enum
comme ici, une
struct
, un
int
, un pointeur sur
char
,...). 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 type
FILE
), 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 les
typedef
, 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).
0