我在以下课程中缺少什么?

Moe*_*oeb 2 c sizeof

#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位平台上,无论是-1MAX_UINT0xFFFFFFFF.

你的TOTAL_ELEMENTS()宏可以合并一个强制转换,(int)但这在技术上并不正确,因为size_t它的值范围比int.最好更改循环变量,使其声明为size_t永不变为负数.