存在BUG的代码:
#include <stdio.h>
int array[]={23,34,12,17,204,99,16};
#define TOTAL_ELEMENTS (sizeof(array)/sizeof(array[0]))
int main()
{
int d=-1,x;
if(d<=TOTAL_ELEMENTS - 2)
x=array[d+1];
printf("%d\n",x);
return 0;
}
结果是:
原因:经过sizeof()的计算,TOTAL_ELEMENTS值的类型为unsigned int 类型。在if语句中,d为int型,TOTAL_ELEMENTS-2为unsigned int型,则d被转换为unsigned int型。-1转换为无符号型,则变为很大的一个值,大于TOTAL_ELEMENTS-2的值,则x无法被赋值,存在乱码。
解决办法:TOTAL_ELEMENTS强制转换为int型,即可。
修改后的代码:
#include <stdio.h>
int array[]={23,34,12,17,204,99,16};
#define TOTAL_ELEMENTS (sizeof(array)/sizeof(array[0]))
int main()
{
int d=-1,x;
if(d<=(int)TOTAL_ELEMENTS - 2)
x=array[d+1];
printf("%d\n",x);
return 0;
}
结果: