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
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.
Mit wievielen Elementen ist das Array leds[] deklariert? Ich tippe auf 96. Und Deine Schleife beschreibt 97.
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
Wobei die '96' durchgerutscht ist; in vielen anderen Zeilen steht richtig '95'.
Thomas G. schrieb: > Wobei die '96' durchgerutscht ist; in vielen anderen Zeilen steht > richtig '95'. Magic Numbers sollte man vermeiden.
Dirk B. schrieb: > Magic Numbers sollte man vermeiden. also besser? #define MAXLED 96 for(int i=0;i<MAXLED;i++)
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
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.