Forum: Compiler & IDEs Was sagt mir diese Warnung


von benny (Gast)


Lesenswert?

Hi,

hier habe ich einen Code-Schnipsel
1
#include <avr/pgmspace.h>
2
3
typedef struct {
4
  const char s[2][20];
5
  const int i;
6
} TT;  
7
8
const TT aa[] PROGMEM = {
9
  'a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a',
10
  'b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b',
11
  2356
12
};

bei dem ich immer folgende Warnungen bekomme:

../main.c:261: warning: missing braces around initializer
../main.c:261: warning: (near initialization for 'aa[0]')

Weiß jemand Rat?

von Ralf S. (spacedog) Benutzerseite


Lesenswert?

1
const TT aa PROGMEM = {
2
  {
3
    {'a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a'},
4
    {'b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b'}
5
  },
6
  2356
7
};

von Sven P. (Gast)


Lesenswert?

benny wrote:
> Hi,
>
> hier habe ich einen Code-Schnipsel
> [...]
> bei dem ich immer folgende Warnungen bekomme:
>
> ../main.c:261: warning: missing braces around initializer
> ../main.c:261: warning: (near initialization for 'aa[0]')
Und völlig zu Recht.
1
#include <avr/pgmspace.h>
2
3
typedef struct {
4
  const char s[2][20];
5
  const int i;
6
} TT;
7
8
const TT aa[] PROGMEM = {
9
  {
10
    {
11
      {
12
        'a','a','a','a','a',
13
        'a','a','a','a','a',
14
        'a','a','a','a','a',
15
        'a','a','a','a','a'
16
      },
17
      {
18
        'b','b','b','b','b',
19
        'b','b','b','b','b',
20
        'b','b','b','b','b',
21
        'b','b','b','b','b'
22
      }
23
    },
24
    2356
25
  }
26
};

von (prx) A. K. (prx)


Lesenswert?

Deine Deklaration hat 3 Hierarchieebenen:
- struct
- array[2]
- array[20]
und folglich sollte das sinngemäss so aussehen:
= {{{'a'..'a'},{'b'..'b}},2356};

von Sven P. (Gast)


Lesenswert?

A. K. wrote:
> Deine Deklaration hat 3 Hierarchieebenen:
> - struct
> - array[2]
> - array[20]
> und folglich sollte das sinngemäss so aussehen:
> = {{{'a'..'a'},{'b'..'b}},2356};
Vorsicht, das ganze Ding ist nochmal ein Vektor :-)

von (prx) A. K. (prx)


Lesenswert?

Yep, den hatte ich übersehen.

von Ralf S. (spacedog) Benutzerseite


Lesenswert?

Sven Pauli wrote:
> const TT aa[] PR...

Vorsicht 2: Die eckigen Klammern nach dem aa müssen natürlich weg.

von (prx) A. K. (prx)


Lesenswert?

Wieso?

von Ralf S. (spacedog) Benutzerseite


Lesenswert?

Weil das Teil ja kein Array ist und auch kein Struct-Array, sondern nur 
ein einfaches Struct, halt mit nem zweidimensionalen Array drin (komme 
selber bald nicht mehr draus).

von benny (Gast)


Lesenswert?

Nee,

die eckigen Klammern nach dem aa werden noch gebraucht. Auch wenn ich 
hier nur ein Element eingetragen habe, sollen es noch ganz viele werden 
;-)

von Ralf S. (spacedog) Benutzerseite


Lesenswert?

Ach so, ja klar.

Dann kommt aber nochmals ein Satz geschweifte Klammer drumrum, so wie 
bei Sven Pauli, welcher natürlich vollkommen Recht hat mit seiner 
Lösung.

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.