Forum: Mikrocontroller und Digitale Elektronik sizeof(struct_name) in union


von Bill (Gast)


Lesenswert?

ich dachte ich hätte sowas schonmal gemacht...
geht das nicht?? was tun?

danke!
1
typedef union{
2
  struct {
3
    unsigned char start_flag;
4
    unsigned char seq;
5
    unsigned char rec_id;
6
    unsigned char data[MAX_DATA];
7
    unsigned char check_sum;
8
    unsigned char stop_flag;
9
  } fields;
10
  unsigned char bytes[sizeof(fields)];
11
}Frame;
12
13
../datalink.c:48: error: 'fields' undeclared here (not in a function)

von Ahem (Gast)


Lesenswert?

An der Stelle ist ja die Strukturdeklaration abgeschlossen.

Man könnte d'rüber streiten, ob das der Compiler können sollte. Mir ist 
zwar nichts gegenteiliges bekannt, aber es könnte sein, das es nicht so 
ist.

Ein Ähnliches Problem tritt ja auch bei verlinkten Listen auf.

Ich würde also die struct erstmal deklarieren und anschliessen das 
typedef machen.

Etwa so:
1
  struct xyz{
2
    unsigned char start_flag;
3
    unsigned char seq;
4
    unsigned char rec_id;
5
    unsigned char data[MAX_DATA];
6
    unsigned char check_sum;
7
    unsigned char stop_flag;
8
  };
9
10
typedef union{
11
  struct xyz fields;
12
  unsigned char bytes[sizeof(struct xyz)];
13
}Frame;

von Bill (Gast)


Lesenswert?

ja klar das kann ich tun. ist halt nicht hübsch.
hast wahrscheinlich recht, der gcc kann das wohl nicht.

danke dir!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.