在更新用于计算switch语句变量的计数器时,我遇到了一个奇怪的错误。
int iCount
在循环外被指定为零,它是用于while循环的计数器。
为了更新循环内的计数器,我写了iCount+= packedCount
,其中packedCount在这种情况下为7。但是,在调试器中,0 + = packedCount导致packedCount + 1,即8。这导致整个循环中的数组插槽仍未填充。
当我将行更改为icount= packedCount+iCount
时,返回了正确的值。
所以,这种行为对C来说是独一无二的,因为我在Java中经常这样做,没有任何奇怪的效果。
编辑 - 已添加代码段
#define SKIP 8
#define PACKED 7
int iCount;
iCount=0;
while (iCount < characters-1){
for (packedCount=iCount; packedCount< iCount+PACKED; packedCount++){
//ASCII compressor logic goes here
}
//iCount+= packedCount; //this produces 8 for 0+packedCount
//this works
iCount= iCount+packedCount; //skip the next byte in array, since it was already packed
}
答案 0 :(得分:3)
就编译器而言
iCount += packedCount;
iCount = iCount + packedCount;
是完全相同的。如果它们产生不同的结果,那么代码中的某些内容会导致iCount被删除 - 可能是一个错误的指针引用。
答案 1 :(得分:1)
试试这个以及您可以想到的其他变体:
#define SKIP 8
#define PACKED 7
int iCount;
iCount=0;
while (iCount < characters-1){
for (packedCount=iCount; packedCount< iCount+PACKED; packedCount++){
//ASCII compressor logic goes here
}
printf("iCount after the inner loop: %d\n", iCount); /* DEBUG */
printf("packedCount after the inner loop: %d\n", packedCount); /* DEBUG */
//iCount+= packedCount; //this produces 8 for 0+packedCount
//this works
iCount= iCount+packedCount; //skip the next byte in array, since it was already packed
printf("iCount after update: %d\n", iCount); /* DEBUG */
}