#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;
}
Run Code Online (Sandbox Code Playgroud)
为什么for循环不能运行一次?
Hea*_*utt 18
问题是未签名的sizeof()退货size_t.-1with的比较TOTAL_ELEMENTS - 2应该会产生一个警告,表明你已经将unsigned与signed进行了比较.发生此比较时,将-1转换为无符号值MAX_UINT.在32位平台上,无论是-1和MAX_UINT是0xFFFFFFFF.
你的TOTAL_ELEMENTS()宏可以合并一个强制转换,(int)但这在技术上并不正确,因为size_t它的值范围比int.最好更改循环变量,使其声明为size_t永不变为负数.