Variable zu union casten

OP #5179581
Lesenswert?

Hallo zusammen


Ich habe eine Union:
1
typedef union
2
{
3
  struct
4
  {
5
    uint8_t NLOAD   : 1;
6
    uint8_t FNLOAD   : 1;
7
    uint8_t VANLOAD     : 1;
8
   }
9
   uint8_t status
10
}reg02;

Nun möchte ich die variable tmp als diese union interpretieren.
1
uint8_t tmp
2
....
3
((reg02)tmp).NLOAD = 1;

Weshalb geht das so nicht?

Danke!
Moderator Persönliche Seite #5179597
Lesenswert?

Da fehlen zum einen insgesamt 3 Semikolons, zum anderen musst Du der 
Struct in der Union auch einen Namen geben - hier z.B. "b".

Schreibe:
1
typedef union
2
{
3
  struct
4
  {
5
    uint8_t NLOAD   : 1;
6
    uint8_t FNLOAD  : 1;
7
    uint8_t VANLOAD : 1;
8
   } b;
9
   uint8_t status;
10
} reg02;
11

12
int main ()
13
{
14
    reg02   tmp;
15
    tmp.b.NLOAD = 1;
16

17
    return 0;
18
}

Und es geht. Warum dieser merkwürdige Cast statt direkt den Typ von tmp 
richtig anzugeben?
Gast #5179642
Lesenswert?

Also :
1
typedef union
2
{
3
  struct
4
  {
5
    uint8_t NLOAD   : 1;
6
    uint8_t FNLOAD  : 1;
7
    uint8_t VANLOAD : 1;
8
   } b;
9
   uint8_t status;
10
} reg02;
11

12
int main ()
13
{
14
   uint8_t tmp
15
   ((reg02*)&tmp)->b.NLOAD = 1;
16

17
    return 0;
18
}

Muhaha... da schüttelt's einen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren