2010-05-03 5 views

Répondre

8

Je l'utilise parfois pour créer une union entre certaines données:

typedef union { 
    struct { 
     int x, y, z; 
    }; 
    int elements[3]; 
} Point; 

De cette façon, je peux facilement boucler sur les coordonnées avec elements mais aussi utiliser la forme plus courte x, y et z au lieu de elements[0] etc.

+0

Bien sûr, une telle utilisation pourrait très bien être un comportement indéfini. Juste parce que tout le monde le fait, ne veut pas dire que c'est valide. :) – unwind

3

C'est tout à fait correct si vous voulez simplement exprimer que deux valeurs sont communes, mais n'ont jamais besoin du groupement particulier en tant que type autonome. Il peut être considéré comme un peu pédant et penchant vers le côté de la super-ingénierie, mais il peut également être vu comme un grand moyen d'ajouter de la clarté et de la structure.

Tenir compte:

struct State 
{ 
    Point position; 
    float health; 
    int level; 
    int lives_left; 
    int last_checkpoint; 
    char filename[32]; 
}; 

contre

struct State 
{ 
    struct 
    { 
    Point position; 
    float health; 
    int level; 
    int lives_left; 
    }    player; 
    struct { 
    int last_checkpoint; 
    char filename[32]; 
    }    level; 
} 

Le dernier cas est un peu plus difficile à mettre en retrait clairement, mais il n'exprime d'une manière très claire que certaines valeurs sont associées à la joueur, et certains avec le niveau.