Forum: Mikrocontroller und Digitale Elektronik Arduino - Syntax geändert?


von Thomas G. (Firma: Frickelhauptquartier) (taximan)


Lesenswert?

Ich habe hier ein Script, dass ich ca 1,5 Jahre nicht bearbeitet habe. 
Der Compiler meckert bei dieser (und vieler ähnlicher Zeilen), bricht 
aber nicht ab.
void prg0(){  // alles aus
  for(int i=0;i<=96;i++)
{leds[i] = CRGB::Black; }
FastLED.show();
}

C:\Users\TG\Documents\Arduino\lighthouse04\lighthouse04.ino:3058:16: 
note: within this loop
 3058 |   for(int i=0;i<=96;i++)
      |               ~^~~~

Was ist hier los?
Ich bin mir ziemlich sicher, dass diese Meldung(en) früher nicht kamen.
Verwendete IDE 1.8.13

von Wastl (hartundweichware)


Lesenswert?

Thomas G. schrieb:
> Der Compiler meckert bei dieser (und vieler ähnlicher Zeilen), bricht
> aber nicht ab.

Vielleicht zeigst du mal die vollständige Meckerzeile. Sonst
gibt's fröhliches Rätselraten.

von MaWin O. (mawin_original)


Lesenswert?

>Frickelhauptquartier

Der Name ist wohl Programm.

von Paul B. (paule201)


Lesenswert?

Dein Array in der Schleife ist zu klein.

von Harald K. (kirnbichler)


Lesenswert?

Mit wievielen Elementen ist das Array leds[] deklariert?

Ich tippe auf 96.

Und Deine Schleife beschreibt 97.

von Thomas G. (Firma: Frickelhauptquartier) (taximan)


Lesenswert?

Das war es wohl, danke euch!

von Joachim B. (jar)


Lesenswert?

aber warum <= wenn du nur 96 Elemente hast? (int i=0;i<=96)

von Paul B. (paule201)


Lesenswert?

Joachim B. schrieb:
> aber warum <= wenn du nur 96 Elemente hast? (int i=0;i<=96)

Sein Array ist LED[96] = LED[0] bis LED[95]

Sein Schleife schreibt aber 97 Elemente. LED[0] bis LED[96]--> das merkt 
der Compiler --> Compiler Warnung.

: Bearbeitet durch User
von Thomas G. (Firma: Frickelhauptquartier) (taximan)


Lesenswert?

Wobei die '96' durchgerutscht ist; in vielen anderen Zeilen steht 
richtig '95'.

von Dirk B. (dirkb2)


Lesenswert?

Thomas G. schrieb:
> Wobei die '96' durchgerutscht ist; in vielen anderen Zeilen steht
> richtig '95'.

Magic Numbers sollte man vermeiden.

von Joachim B. (jar)


Lesenswert?

Dirk B. schrieb:
> Magic Numbers sollte man vermeiden.

also besser?

#define MAXLED 96
for(int i=0;i<MAXLED;i++)

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Joachim B. schrieb:
> also besser?

Nein!


So geht das:
1
void prg0() //alles aus
2
{ 
3
  for(auto &led:leds) led = CRGB::Black;
4
  FastLED.show();
5
}
Merke, ohne Index, kein Indexfehler!

Joachim B. schrieb:
> #define MAXLED 96
Define ist hier unnötig.

: Bearbeitet durch User
von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Joachim B. schrieb:
> also besser?
> #define MAXLED 96
> for(int i=0;i<MAXLED;i++)

Ja, natürlich. Gerade, wenn die Konstante an zig Stellen im Source 
vorkommt. Willst Du jedesmal mehrere Dutzend Zahlen austauschen, wenn Du 
eine LED neu dranlötest?

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Frank M. schrieb:
> Ja, natürlich.
Nöö..
constexpr int anzahlLed {96};

: Bearbeitet durch User
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.