带有(死)简单C程序的Bug

时间:2014-03-14 10:09:50

标签: c

有人可以发现以下程序的问题是什么,它不打印数组的数字就像它应该

#include<stdio.h>

#define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0]))
int array[] = {23,34,12,17,204,99,16};

int main()
{
    int d;
    for(d=-1;d <= (TOTAL_ELEMENTS-2);d++)
        printf("%d\n",array[d+1]);
    return 0;
}

1 个答案:

答案 0 :(得分:9)

你需要施放条件:

d <= (int)(TOTAL_ELEMENTS-2)

sizeof以无符号格式返回字节数。

Before CastAfter Cast。宏本身并不是类型安全的,没有强制转换,两个值都会转换为无符号值,结果为false。