【发布时间】:2016-12-26 18:29:56
【问题描述】:
在下面显示的代码中,没有打印任何内容,这意味着for 循环中的条件失败。可能是什么原因?
我想知道,因为当我单独打印TOTAL_ELEMENTS时,它给出了5,所以自然这一定是5-2=3 => -1<=3,所以它应该打印一些东西。
#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;
}
谁能解释一下这段代码?
【问题讨论】:
-
“因为当我单独打印 TOTAL_ELEMENTS 时,结果为 5” - 不,不是。你有什么理由让它这么复杂?
-
我不知道您使用的是哪个编译器,但 GCC 会给出正确的提示:“警告:有符号整数和无符号整数之间的比较”。当然,如果您已打开所有警告。谁给了这 8 个(用词:8 个!)赞成票?
-
@deamentiaemundi 只有
-Wextra才会发出警告。不是每个人都使用它,但每个人都应该使用它。 -
什么是for循环从-1开始,然后数组索引加1的原因?
标签: c type-conversion c-preprocessor implicit-conversion