ADB*_*dge 1 c if-statement testcase
我写了以下代码:
#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");
}
}
Run Code Online (Sandbox Code Playgroud)
当我编译此代码(带有gcc main.c -Wall(无警告!))并运行它时,printf无法执行。我的意思是,test= -1,它肯定小于数组的大小(7 位数字)。错误在哪里?
该错误在于unsigned和之间的差异signed。具体来说,定义的变量TOTAL_ELEMENTS的类型是unsigned int(sizeof返回unsigned,因为大小永远不能为负)。该测试正在将 asigned int与 an进行比较unsigned int。那失败了,因为test被提升为unsigned. -1 转为无符号变成一个大的正整数,从而使if条件返回 false。
如果你用gcc main.c -Wall -Wextra它编译会发出警告。