sizeof(struct_name) in union

Gast #1214326
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)
Gast #1214332
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;

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.