c语言陷阱(1)

int array[] = {1,2,3,4};

#define SIZE (sizeof(array)/sizeof(array[0]))

int i=-1;

if(i<SIZE)

{

......................

}

该条件的语句永远都不会执行。

因为sizeof 返回的是unsigned int ;  -1 与SIZE 比较时,i 会转变成为unsigned int ,成为一个巨大的数。11111111111111111111111111111111. 远远比SIZE 大

解决方案: if (i<(int )SIZE)

尽量少的在程序中使用unsigned 类型

posted @ 2017-08-05 15:32  颜小雀  阅读(184)  评论(0编辑  收藏  举报