循环控制抛出未定义的行为

时间:2017-12-27 11:29:50

标签: c

我已将我的GCC编译器从4.1.2升级到4.8.3,当我用4.8.3版本编译我的源代码时,我面临以下问题。

错误: 迭代8u调用未定义的行为[-Werror = aggressive-loop-optimizations]

{
uint index;
for ( index =0 ; index<BLOCK_SIZE; index++) 
ltoP->kdlllp= riv64[7-index]; 
}

任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

index为8时; riv64[7-index]riv64[-1u],未定义。消息中的8u表明index的类型为unsigned int,在这种情况下,7-index将评估为数组范围之外的非常大的值。 (7-8u将被评估为7u-8u,相当于-1u。无符号算术包装,因此生成一个非常大的值UINT_MAX。)