警告:迭代5u调用未定义的行为[-Waggressive-loop-optimizations]

Raj*_*esh 2 c mingw

在下面的代码中,我不确定为什么我会收到警告:当我评论printf("")时,迭代5u调用未定义的行为[-Waggressive-loop-optimizations]; for循环中的语句.printf语句如何对此警告做出贡献?

其次,这段代码无限循环.进入while循环时,我知道数组索引超出限制.但是当我消极时,循环应该已经终止.但没有发生.如果i--在进入while循环之前完成,则没有问题.如果索引超出范围,我应该只是将垃圾结果正确.但为何无穷无尽!

 int main (void)
{
   int a[]={4,6,8,2,7};
   int i=0;
   int size = sizeof(a)/sizeof(a[0]);

  for(i=0;i<size;i++)
   {
      // printf(" ");
   }
 // i--; // doing i-- works fine.
   while(i>=0)
    {
      printf("%d\t",a[i]);
      i--;
    }

  return(0);

}
Run Code Online (Sandbox Code Playgroud)

R S*_*ahu 6

如果索引超出范围,我应该只是将垃圾结果正确.但为何无穷无尽!

当for循环结束时,如果值i是5.

在while循环的第一次迭代中,您将访问a[5],这会导致未定义的行为.在那之后,任何事情都可能发生

此外,该while循环在另一个帐户上是错误的.如果不确定的行为不是在循环中调用,T将执行循环的6时间,为的值i等于5,4,3,2,1,和0.

i--;在进入while循环之前执行修复了这两个问题.