Forum: Compiler & IDEs AVR-GCC: Wie sind die Klammern zu setzen?


von Gerd (Gast)


Lesenswert?

Ausschnitt 1 mit auskommentierter union lässt sich initialisieren. 
Ausschnitt 2 mit union ergibt das Warnung:

1
Warning    missing braces around initializer [-Wmissing-braces]

Wie muss Ausschnitt 2 korrekt geklammert werden?


Ausschnitt 1:
1
struct busobject
2
{
3
  uint8_t status1;
4
  uint8_t Status2;
5
  uint8_t name[maxname + 1];    
6
//  union
7
//  {
8
    uint16_t address;
9
//    uint16_t value;
10
//  };
11
  uint8_t size;
12
};
13
14
struct busobject obus[2]=
15
{  
16
  {101,  200,  "Relais 1",  0x0025,  0x01},
17
  {107,  202,  "Temp. 02",  0x0025,  0x01}
18
};

Ausschnitt 2:
1
struct busobject
2
{
3
  uint8_t status1;
4
  uint8_t Status2;
5
  uint8_t name[maxname + 1];    
6
  union
7
  {
8
    uint16_t address;
9
    uint16_t value;
10
  };
11
  uint8_t size;
12
};
13
14
struct busobject obus[2]=
15
{  
16
  {101,  200,  "Relais 1",  0x0025,  0x01},
17
  {107,  202,  "Temp. 02",  0x0025,  0x01}
18
};

von Oliver S. (oliverso)


Lesenswert?

Die Union braucht einen eigenen Satz Klammern.

http://en.cppreference.com/w/c/language/struct_initialization

Oliver

von daddel (Gast)


Lesenswert?

Gerd schrieb:
> union
>   {
>     uint16_t address;
>     uint16_t value;
>   };
1
union
2
{
3
  uint16_t address;
4
  uint16_t value;
5
} name_der_union;

Versuch es mal, indem du deiner union noch einen Namen gibst!

von nicht"Gast" (Gast)


Lesenswert?

daddel schrieb:
> Versuch es mal, indem du deiner union noch einen Namen gibst!

nicht zwangläufig. Die darf auch unbenannt bleiben. Dein Code ist 
außerdem falsch.

Entwerder muss nooch ein typedef davor oder der Name kommt hinter das 
struct.

von Gerd (Gast)


Lesenswert?

@ Oliver

Danke für den Link.

@ daddel & nicht"Gast"

Sucht euch einen anderen Thread zum Trollen.

von MaWin (Gast)


Lesenswert?

nicht"Gast" schrieb:
> Entwerder muss nooch ein typedef davor oder der Name kommt hinter das
> struct.

Nein. Völliger Unsinn.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Setze die Klammern einfach dort, wo die auch in der Typ-Definition 
stehen, d.h. auch um die Initializer for die Union.

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.