Dieses ganze
>
1 | > volatile struct
|
2 | > {
|
3 | > uint16_t Erststart:1;
|
4 | > uint16_t Rel:1;
|
5 | > uint16_t DCout:1;
|
6 | > uint16_t PowON:1;
|
7 | > uint16_t ALZ_freeze:1;
|
8 | > uint16_t GSM_Sleep:1;
|
9 | > uint16_t ALZ_gesetzt:1;
|
10 | > uint16_t bfrei_8:1;
|
11 | >
|
12 | > uint16_t Alarm:1;
|
13 | > uint16_t Batwechsel:1;
|
14 | > uint16_t GSM_aktiv:1;
|
15 | > uint16_t Ring:1;
|
16 | > uint16_t GSM_error:1;
|
17 | > uint16_t mb_alarm:1;
|
18 | > uint16_t LiIon_alarm:1;
|
19 | > uint16_t fence_alarm:1;
|
20 | > }bit;
|
ist schon Schwachsinn. Mach halt keine anonyme Struktur draus, dann kann
man sich auch in Zukunft drauf beziehen.
Ein
1 | struct xy_Coord
|
2 | {
|
3 | double x;
|
4 | double y;
|
5 | };
|
beschreibt erst mal, wie eine bestimmte Struktur aussieht. Da ist noch
keine Speicherallokierung damit verbunden oder sonst etwas, sondern das
ist erst mal nur der Bauplan: Wie sieht eine struct xy_Coord Variable
aus.
Und dann kann man davon Variablen erzeugen. Genauso wie du eine int
Variable erzeugst
kannst du mit deinem niegel-nagel-neuen Datentyp 'struct xy_Coord' eine
neue Variable erzeugen.
1 | struct xy_Coord Mittelpunkt;
|
Aus praktischen Gründen, kann man in C jetzt auch beides zusammenfassen:
In einem Aufwasch eine neue Struktur definieren und auch gleichzeitig
davon Variablen erzeugen
1 | struct xy_Coord
|
2 | {
|
3 | double x;
|
4 | double y;
|
5 | } Mittelpunkt, Umfangspunkt, EckeLinksOben;
|
und man kann in so einem Fall dann auch den Namen der Struktur
weglassen. Denn zum Erzeugen der Variablen braucht man ihn ja durch die
Zusammenfasseung nicht mehr
1 | struct
|
2 | {
|
3 | double x;
|
4 | double y;
|
5 | } Mittelpunkt, Umfangspunkt, EckeLinksOben;
|
So etwas nennt man dann eine anonyme Struktur, weil sie ja keinen Namen
hat.
Die Kehrseite der Medaille ist, dass man sich dann auf diese Struktur in
einem anderen Zusammenhang auch nicht mehr beziehen kann. Wenn sie
keinen Namen hat, wie soll man sich dann darauf beziehen?
Wenn das nie der Fall ist und man das nie braucht, dann ist das schon
ok. Aber in den meisten Programmen benötigt man den Namen der Struktur
an der einen oder anderen Stelle und genau deshalb sind anonyme
Strukturen meisten Unsinn. Zumindest in diesem Zusammenhang. 'typedef's
lasse ich jetzt erst mal aussen vor.
Hast du einen int
dann kannst du einen Zeigr auf int erzeugen und auf den int zeigen
lassen
hast du einen double
denn bezeichnet
1 | double * ptrToDouble = &d;
|
eine Zeiger auf diesen double.
Hast du einen long
dann bezeichnet
eine Pointer auf einen long.
Hast du daher ein
1 | struct xy_Coord Mittelpunkt;
|
dann bezeichnet folgerichtig
1 | struct xy_Coord * ptrToPunkt = &Mittelpunkt;
|
einen Pointer auf ein Objekt welches vom Typ 'struct xy_Coord' ist.
Hat denn dein C-Buch zu diesem Thema gar nichts zu sagen?
Das kann ich mir nicht vorstellen. In deinem C-Buch müsste das Thema
Strukturen, sowie das Thema Pointer mindestens einen Umfang von gut und
gerne 30 bis 40 Seiten einnehmen, welcher sich dann ab diesen beiden
Kapiteln durch den Rest, und das sind immerhin mindestens die Hälfte des
C-Buches, hinzieht und immer wieder vor kommt. Kein Wunder, das sind ja
auch Grundlagen auf denen dann wieder andere Dinge aufbauen.
Oder gehörst du auch wieder mal zu der Sorte, die meinen, kein C-Buch zu
brauchen, weil sie sich mit anlassbezogenem Erfragen von Achtelwissen in
Foren durch die Programmierung schlagen?