迭代500调用未定义的行为[-Waggressive-loop-optimizations]

时间:2018-02-19 14:15:41

标签: arduino

我正在研究一个Arduino代码并且代码看起来很好并且结构良好但是我想在一行中有错误或者我忘了添加smthg无论如何这里是代码

#include <SoftwareSerial.h>
#include <avr/pgmspace.h>
const int dsize = 500;
int analogPin = A0;    
int data[dsize];
int counter = 0;
unsigned long measurmentDelay = 600000; //10 min

SoftwareSerial mySerial(2, 3); // RX, TX

unsigned long time_now = millis();

void setup() {
  // put your setup code here, to run once:
delay(500);
  mySerial.begin(9600);
  mySerial.println("###Power on###");
  int i=0;
  for (i = 0; i < dsize+1; i = i+1) {
    data[i]=0;
  }
  time_now = millis();
}

我有这个错误,我不知道该怎么做

H:\Python\sketch_feb19a\sketch_feb19a.ino: In function 'setup':

H:\Python\sketch_feb19a\sketch_feb19a.ino:20:14: warning: iteration 500 invokes undefined behavior [-Waggressive-loop-optimizations]

     data[i]=0;

              ^

H:\Python\sketch_feb19a\sketch_feb19a.ino:19:3: note: containing loop

   for (i = 0; i < dsize+1; i = i+1) {

   ^

如果有人能提供帮助,我会感激不尽。

1 个答案:

答案 0 :(得分:1)

实际上错误很清楚。它告诉你,在你的循环中,迭代500有一些错误。

如果仔细观察,您会发现data是一个500元素的数组。

您正在从0到500(包括两者)进行迭代,因此它是501个元素。

要解决它,你的循环应该只有500步,而不是501(基本上删除代码中的+1)

for (i = 0; i < dsize; i = i+1)