33. structs II/typedef

structs initialisieren

Structs können ähnlich Arrays schon bei der Definition Werte bekommen:

struct Note_s {
  char *pitch;
  int duration;
};
struct Note_s shortG = {"g", 3};

Die Anfangswerte werden in der Reihenfolge angegeben, in der die Elemente in der Strukturdeklaration stehen. Bei größeren structs wird das ziemlich unübersichtlich, weshalb gcc und C99 folgendes erlauben:

struct Note_s shortG = {.pitch="g", .duration=3};

typedef

Tipparbeit bei structs sparen und Intention klarer machen:

typedef int boolean;
typedef char line[LN_LEN];
typedef struct Note_s {
  char *pitch;
  int duration;
} Note;

Im Wesentlichen: typedef funktioniert wie Variablendefinition, nur wird nicht eine Variable, sondern ein Typ definiert. Nach den Zeilen oben:

boolean b;
line l;
Note stillenacht[] = {
{"g", 3},
{"a", 1},
{"g", 2},
};
void playNote(Note *note)
{
  int freq=(int)(computeFreq(note->pitch)+0.5);
  beep(freq, note->duration*BEAT);
}


Markus Demleitner

Copyright Notice