变量正确,但测试用例不执行

Variable is correct, but test case does not execute

我写了下面的代码:

#include <stdio.h>

int array[] = {23, 43, 12, 17, 204, 99, 16};
#define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0]))

int main()
{
        int test = -1;

        if (test <= TOTAL_ELEMENTS)
        {
                printf("Hello, got here!\n");
        }
}

当我编译此代码(使用 gcc main.c -Wall(无警告!))和 运行 时,printf 无法执行。我的意思是,test = -1,这肯定小于数组的大小(7 位数字)。错误在哪里?

错误出现在 unsignedsigned 之间。具体来说,定义的变量 TOTAL_ELEMENTS 的类型是 unsigned intsizeof returns unsigned 因为大小永远不能为负数)。测试正在比较 signed intunsigned int。失败是因为 test 被提升为 unsigned。 -1 变成无符号成为一个大的正整数,从而使 if 条件 return 为假。

如果你用 gcc main.c -Wall -Wextra 编译它会警告。