我正在尝试以下代码片段,它应该打印全局数组的内容。但为什么永远不会输入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;
}
答案 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++)
并且您的代码有效。