变量正确,但测试用例不执行
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 位数字)。错误在哪里?
错误出现在 unsigned
和 signed
之间。具体来说,定义的变量 TOTAL_ELEMENTS
的类型是 unsigned int
(sizeof
returns unsigned
因为大小永远不能为负数)。测试正在比较 signed int
和 unsigned int
。失败是因为 test
被提升为 unsigned
。 -1 变成无符号成为一个大的正整数,从而使 if
条件 return 为假。
如果你用 gcc main.c -Wall -Wextra
编译它会警告。
我写了下面的代码:
#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 位数字)。错误在哪里?
错误出现在 unsigned
和 signed
之间。具体来说,定义的变量 TOTAL_ELEMENTS
的类型是 unsigned int
(sizeof
returns unsigned
因为大小永远不能为负数)。测试正在比较 signed int
和 unsigned int
。失败是因为 test
被提升为 unsigned
。 -1 变成无符号成为一个大的正整数,从而使 if
条件 return 为假。
如果你用 gcc main.c -Wall -Wextra
编译它会警告。