一个微妙的错误
大家看看这一段代码,然后想想会输出什么?
#include <iostream>
using namespace std;
int array[]={23,24,26,78};
#define SIZE (sizeof(array)/sizeof(array[0]))
int main(char argc,char ** argv){
int d=-1;
if(d<=SIZE)cout<<"hello wprld"<<endl;
else cout<<"I an going to sleep"<<endl;
return 0;
}
答案:
为什么呢?
解释一下,因为sizeof返回的是unsigned类型的数据,然后也就是说SIZE为unsigned int,然后在做比较的时候,也就是在做“d<=SIZE”时候,自动把d也转成unsigned int了。。然后,。。。。然后。。。就没有然后了。
两个建议:
首先,尽量避免使用unsigned;
其次,#define SIZE (sizeof(array)/sizeof(array[0]))最好不要写成#define SIZE (sizeof(array)/sizeof(int)。原因很简单,就是前者的写法更加稳健,谁知道什么时候array的类型被你改了,是吧。。。。。。。。。。。。