2010-05-03 11 views

Antwort

8

ich es manchmal verwenden, um eine Verbindung zwischen einigen Daten zu erstellen:

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

Auf diese Weise kann ich einfach Schleife über die Koordinaten mit elements, sondern auch die kürzeren Form verwenden x, y und z statt elements[0] usw.

+0

Natürlich kann eine solche Verwendung sehr undefiniert Verhalten sein. Nur weil jeder es tut, bedeutet es nicht, dass es gültig ist. :) – unwind

3

Es ist völlig in Ordnung, wenn Sie nur ausdrücken möchten, dass zwei Werte zusammengehören, aber die bestimmte Gruppierung niemals als eigenständigen Typ benötigen.

Es könnte als ein bisschen pedandic und neigt zu der over-Engineering-Seite der Dinge gesehen werden, aber es kann auch als eine große Möglichkeit gesehen werden, um Klarheit und Struktur hinzuzufügen.

Bedenken Sie:

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

gegen

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

Der letzte Fall eindeutig etwas schwieriger einrücken, aber es ist in einer sehr klaren Art und Weise auszudrücken, dass ein Teil der Werte mit den zugehörigen Spieler und einige mit dem Level.

Verwandte Themen