看下面的代码:
int func(char i)
{
switch(i)
{
case0x82:
return 1;
default:
return 0;
}
}
int main()
{
unsigned char a=0x82;
ret=func(a);
if(ret==1)
{
printf("bingo");
}
else
{
printf("miss");
}
}
最终输出的应该是bingo还是miss呢?
按照分析,在调用func函数中a会被强转为有符号数,也就是说func函数中i是一个负数,switch case 在比较时是将switch的变量和case的变量都转换成int进行比较,负数与整数比较,应该返回0并打印miss。
在RHEL AS 6(内核版本2.6.18)上的测试结果也是这样,但是在另外一种操作系统Great Turbo 10(内核版本2.6.9),func却返回0,打印bingo。
参考:http://stackoverflow.com/questions/24079001/what-promoted-types-are-used-for-switch-case-expression-comparison