Warning beim compilieren

Hallo Zusammen,
ich bekomme beim kompilieren auf einem Arduino Nano zwei Meldungen, die ich mir nicht erklären kann. Einmal eine Warnung und einmal eine Notice.

Es geht dabei um folgenden Code:

void loop() {
  int pos = 0;
  int sensor[4];

  for (int i = 0; i < 5; i++) {
    pos = i + 14;
    sensor[i] = digitalRead(pos);

Erstens:

.... note: containing loop
   for (int i = 0; i < 5; i++) {
                     ^

Die Notice scheint auf dem "<" zu stehen. Ich habe es auch schon mit "<=" und "==" versucht. Die Meldung bleibt die Gleiche.

Zweitens:

warning: iteration 4 invokes undefined behavior [-Waggressive-loop-optimizations]
     sensor[i] = digitalRead(pos);
                                 ^

Ich habe es auch schon ohne "pos" versucht, also "digitalRead(i +14);". Die Meldung bleibt aber leider gleich.

Das Programm selber läuft einwandfrei, will sagen der Nano macht das was er machen soll. Es sind ja auch keine Fehlermeldungen. Könnte mir jemand erklären, was ich hier übersehe.

Vielen Dank

Milly:
Hallo Zusammen,
ich bekomme beim kompilieren auf einem Arduino Nano zwei Meldungen, die ich mir nicht erklären kann.

void loop() {

int pos = 0;
  int sensor[4];

for (int i = 0; i < 5; i++) {
    pos = i + 14;
    sensor[i] = digitalRead(pos);

Ich erhalte schon vorher ne Warnung.

Zudem: Wenn Du in einer Funktion(und das ist loop) eine Var benutzt wird, solltest der einen Wert mitgeben. Anders als Vars die systemweit deklariert werden, bekommen die nicht automatsich einen Ausgangswert.

Dann meint die Fehlermeldung wohl, das das Array zu klein sein könnte.
So gehts:

void loop()
{
  int sensor[5]={0};
  int pos = 0;
  for (unsigned int i = 0; i < 5; i++) {
    pos = i + 14;
    sensor[i] = digitalRead(pos);
  }
}

Offensichtlich!
Das Array hat 4 Elemente, du reitest auf 5 Elementen rum.

Das Programm selber läuft einwandfrei, will sagen der Nano macht das was er machen soll.

Sieht nur so aus.

In Wirklichkeit ist es defekt, da du dort ein "Undefined Behavior" eingebaut hast.


Einmal eine Warnung und einmal eine Notice.

Und warum verstümmelst du die Notice bis zur Unkenntlichkeit?

Ok, ist vielleicht logisch...

Wenn du sie nicht verstehst, dürfen wir sie zur Strafe auch nicht sehen.


Tipp:
Die Meldungen doch bitte selber lesen.
Ihnen glauben schenken.
Und mit dem C++ Buch in der Hand überprüfen, was sie bedeuten könnten.

@my_xy_projekt
Vielen Dank. Das war tatsächlich der Fehler. Hatte übersehen das ich noch einen Sensor hinzugenommen hatte, daher war das Array zu klein. Mannomann so was blödes.

@combie
Ich hatte von der Fehlermeldung nur den vorderen Teil abgeschnitten, weil dort der Pfad zum Prg. steht und das ja wohl unerheblich ist. Ich wollte das es übersichtlicher ist und nicht etwas verbergen.

C:\Users\milly\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.22\cores\arduino\main.cpp: In function 'main':
D:\MicroController\Arduino\Sketches\GL1800_gang\GL1800_gang.ino:38:36: warning: iteration 4 invokes undefined behavior [-Waggressive-loop-optimizations]
     sensor[i] = digitalRead(i + 14);
                                    ^
D:\MicroController\Arduino\Sketches\GL1800_gang\GL1800_gang.ino:37:30: note: containing loop
   for (unsigned int i = 0; i < 5; i++) {

Ich sehe dabei keine Verstümmelung bis zur Unkenntlichkeit.
Dennoch danke das du dir mein Problem angesehen hast.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.