Forum: Compiler & IDEs Array vorbelegen: excess elements in array initializer


von Daniel (Gast)


Lesenswert?

Nabend,

ich versuche gerade einen array vorzubelegen:
1
const int16_t TestArray [179] PROGMEM = {
2
3
  1,1,1,1,1,1,1,1,1,1,
4
  1,1,1,1,1,1,1,1,1,1,
5
  1,1,1,1,1,1,1,1,1,1,
6
  1,1,1,1,1,1,1,1,1,1,
7
  1,1,1,1,1,1,1,1,1,1,
8
  1,1,1,1,1,1,1,1,1,1,
9
  1,1,1,1,1,1,1,1,1,1,
10
  1,1,1,1,1,1,1,1,1,1,
11
  1,1,1,1,1,1,1,1,1,1,
12
  1,1,1,1,1,1,1,1,1,1,
13
  1,1,1,1,1,1,1,1,1,1,
14
  1,1,1,1,1,1,1,1,1,1,
15
  1,1,1,1,1,1,1,1,1,1,
16
  1,1,1,1,1,1,1,1,1,1,
17
  1,1,1,1,1,1,1,1,1,1,
18
  1,1,1,1,1,1,1,1,1,1,
19
  1,1,1,1,1,1,1,1,1,1,
20
  1,1,1,1,1,1,1,1,1,1
21
};

Der Array enthält wie man sieht 180 Stellen (hier nur Einsen Testweise). 
Die Größe des Arrays habe ich mit 179 definiert, da ja C bei 0 beginnt 
und demnach von 0 bis 179 --> 180 Stellen vorhanden sind.
Dennoch  meckert der Compiler:
test.c:386: warning: excess elements in array initializer
test.c:386: warning: (near initialization for 'TestArray')

Definiere ich die Größe statt 179 auf 180 ist die Warnung weg. Verstehe 
ich aber nicht ganz, da ja C wie gesagt ab 0 initialisiert.
Kann mir das jemand erklären?

Danke.

von Tom M. (tomm) Benutzerseite


Lesenswert?

Daniel schrieb:
> demnach von 0 bis 179 --> 180 Stellen vorhanden

179 Elemente, Indizes 0..178.

von klaus (Gast)


Lesenswert?

C-Buch!

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Das Array hat 179 Elemente, der Initializer 180.

von Rolf Magnus (Gast)


Lesenswert?

Daniel schrieb:
> Der Array enthält wie man sieht 180 Stellen (hier nur Einsen Testweise).
> Die Größe des Arrays habe ich mit 179 definiert, da ja C bei 0 beginnt

... beim Index, da der sich aus dem Offset zum ersten Element ergibt.

> und demnach von 0 bis 179 --> 180 Stellen vorhanden sind.

Genau. Index 0 bis 179, macht eine Größe von 180 Stellen, also mußt du 
als Größe 180 angeben.

von Daniel (Gast)


Lesenswert?

Besten Dank.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Man kann die Größenangabe übrigens auch weglassen, daß der Compiler 
zählen kann, hat er ja mit dieser Meldung unter Beweis gestellt.
Also:
1
const int16_t TestArray[] PROGMEM = {
2
  1,1,1,1,1,1,1,1,1,1,
3
  1,1,1,1,1,1,1,1,1,1,
4
  1,1,1,1,1,1,1,1,1,1,
5
..etc.

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.