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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.