C – struct initialisierung

Gast #5314446
Lesenswert?

Hallo Gemeinde,

Ich nutze den avr-gcc (WinAVR 20100110) 4.3.3
und habe Probleme beim initialisieren einer struct Variable.

Vielleicht kann mir jemand sagen was ich falsch mache.

•
1
C-Code typedef struct {
2
   uint8_t Val_a;
3
   uint8_t Val_b;
4
   uint8_t Val_c;
5
 }wochentag_t;
6

7
typedef struct {
8
   wochentag_t Tag[7];
9
   int16_t TotalNr;
10
 }woche_t;
11

12

13
int main(void){
14

15
  woche_t woche={ {0,1,2},
16
                  {0,1,2},
17
                  {0,1,2},
18
                  {0,1,2},
19
                  {0,1,2},
20
                  {0,1,2},
21
                  {0,1,2},
22
                  1000  };
23

24
C-Code

Fehlermeldungen :

||=== Build: Debug in TestProjV1 (compiler: GNU GCC Compiler for AVR) ===|

main.c|31|error: extra brace group at end of initializer|
main.c|31|error: (near initialization for 'woche')|
main.c|31|warning: excess elements in struct initializer|
main.c|31|warning: (near initialization for 'woche')|
main.c|32|error: extra brace group at end of initializer|
main.c|32|error: (near initialization for 'woche')|
main.c|32|warning: excess elements in struct initializer|
main.c|32|warning: (near initialization for 'woche')|
main.c|33|error: extra brace group at end of initializer|
main.c|33|error: (near initialization for 'woche')|
main.c|33|warning: excess elements in struct initializer|
main.c|33|warning: (near initialization for 'woche')|
main.c|34|error: extra brace group at end of initializer|
main.c|34|error: (near initialization for 'woche')|
main.c|34|warning: excess elements in struct initializer|
main.c|34|warning: (near initialization for 'woche')|
main.c|35|error: extra brace group at end of initializer|
main.c|35|error: (near initialization for 'woche')|
main.c|35|warning: excess elements in struct initializer|
main.c|35|warning: (near initialization for 'woche')|
main.c|36|warning: excess elements in struct initializer|
main.c|36|warning: (near initialization for 'woche')|
||=== Build failed: 10 error(s), 20 warning(s) (0 minute(s), 0 second(s)) ===|

Danke im Voraus.
Gruss,
Jan
Gast #5314479
Lesenswert?

Du wirst schon die Klammern so anordnen müssen, wie du die Typen 
definiert hast.

Der Compiler besitzt keine telepatischen Fähigkeiten, und kann darum 
auch nicht wissen was du meinst.
Du musst schreiben was du meinst, dann gehorcht er.
1
   woche_t woche={
2
                    { 
3
                      {0,1,2},
4
                      {0,1,2},
5
                      {0,1,2},
6
                      {0,1,2},
7
                      {0,1,2},
8
                      {0,1,2},
9
                      {0,1,2}
10
                    },
11
                    1000  
12
                 };

(in C++ gestestet, sollte aber auch für C gelten)
(Firma: RUB) #5314536
Lesenswert?

Oder mit designated initializers
1
#include <stdint.h>
2

3
typedef struct {
4
    uint8_t Val_a;
5
    uint8_t Val_b;
6
    uint8_t Val_c;
7
}wochentag_t;
8

9
typedef struct {
10
    wochentag_t Tag[7];
11
    int16_t TotalNr;
12
}woche_t;
13

14

15
int main(void){
16
    woche_t woche = {
17
        .Tag[0] = {0,1,2},
18
        .Tag[1] = {0,1,2},
19
        .Tag[2] = {0,1,2},
20
        .Tag[3] = {0,1,2},
21
        .Tag[4] = {0,1,2},
22
        .Tag[5] = {0,1,2},
23
        .Tag[6] = {0,1,2},
24
        .TotalNr = 1000
25
    };
26

27
    /*  ... */
28
    return 0;
29
}

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