在下面的代码中,我不确定为什么我会收到警告:当我评论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)
如果索引超出范围,我应该只是将垃圾结果正确.但为何无穷无尽!
当for循环结束时,如果值i是5.
在while循环的第一次迭代中,您将访问a[5],这会导致未定义的行为.在那之后,任何事情都可能发生
此外,该while循环在另一个帐户上是错误的.如果不确定的行为不是在循环中调用,T将执行循环的6时间,为的值i等于5,4,3,2,1,和0.
i--;在进入while循环之前执行修复了这两个问题.