Nommer une struct ou pas ?

a marqué ce sujet comme résolu.

Bonjour, quel intérêt à écrire :

1ère écriture :

typedef struct Machin
{
int a;
}Chose;

Plutôt que 2ème écriture :

typedef struct
{
int a;
}Chose, Machin;

Cette 2ème écriture fera moins de mots dans le code.

  • La 1ère écriture est-elle donc de l’ordre de la "convention" ?
  • ou d’un besoin d’esthétique personnelle ?
  • Ou d’une nécessité du code, dans un emploi futur, plus avancé et que je n’ai pas encore rencontré ?
  • autre ruse ? 😁 Merci !

J’espère que ceci répondra à ta question:

#include <stdio.h>
typedef struct Machin {
    int x;
} Truc;
typedef struct {
    int x;
} Bidule, Chose;     // Deux déclarations différentes se référant à la même structure.

int main(void) {
    Machin tata;     // Donnera une erreur à la compilation.
    struct Machin  toto;     // Pas d'erreur.
    Truc tyty;
    Bidule titi;
    Chose tutu;
}

Il y aura des warning pour les autres définitions car je n’utilise pas ces variables.

+0 -0

Hello,

Dans la seconde écriture, tu déclares une structure anonyme, et Chose et Machin sont deux variables (et seront les seules) de ce type de structure.

Tandis que dans la première écriture, tu déclares une structure de type Machin et une variable Chose de type "struct Machin". Tu pourras, ailleurs dans le programme, déclarer d’autres variables de type "struct Machin", ce qui est impossible à faire avec une struture anonyme.

Dans la seconde écriture, tu déclares une structure anonyme, et Chose et Machin sont deux variables (et seront les seules) de ce type de structure.

edgarjacobs

Non, Chose et Machin sont des types.

Je n’ai pas de réponse absolue quant à la différence entre les deux, mais je dirais que nommer directement la structure est utile en cas de structure récursive : il lui faut en effet un nom pour qu’elle puisse se référencer elle-même (le typedef n’ayant pas encore eu lieu).

#include <stdlib.h>

typedef struct s_node {
    int value;
    struct s_node *next;
} node;

int main() {
    node n1 = {5, NULL};
    node n2 = {4, &n1};
    return 0;
}
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte