使用循环打印全局数组的内容不会产生任何输出

时间:2015-09-08 12:21:16

标签: c arrays global-variables

我正在尝试以下代码片段,它应该打印全局数组的内容。但为什么永远不会输入for循环?

#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;
}

2 个答案:

答案 0 :(得分:3)

d被提升为unsigned int,因为#define的{​​{1}}为TOTAL_ELEMENTS。因此,unsigned成为-1的最大值。

更改您的代码如下

unsigned int

答案 1 :(得分:1)

说实话,我有点惊讶地发现你是对的;-)似乎你的for循环将你的宏解析为无符号值,使得无法正确地与负整数进行比较。用

替换for语句
for(d=-1;d <= ((int)TOTAL_ELEMENTS-2);d++)

并且您的代码有效。